ソースファイルには、カンマ区切りフィールドとパイプ区切りフィールドが含まれています。コンマとパイプで区切られた重複ヘッダーレコードも含まれています。
**ソースファイル**
FOOID|BIZNO|BARBIZ_CODE
00033567|0035952|A,KEEP
00034145|0036865|A,KEEP
FOOID|BIZNO|BARBIZ_CODE
00030527|0032479|Z4,KEEP
00034984|0037987|Z5,KEEP
FOOID|BIZNO|BARBIZ_CODE
00021826|0022008|Z5,KEEP
00026763|0029293|Z5,KEEP
FOOID,BIZNO,BARBIZ_CODE
A0021826,Q022008,Z5,TRASH
B0021826,R022009,Z5,TRASH
C0021826,S022018,Z5,TRASH
FOOID,BIZNO,BARBIZ_CODE
パイプで区切られたヘッダーとパイプで区切られたすべてのレコードを保持したいと思います。
以下を無視してください。
カンマ区切りのすべてのフィールドの履歴とタイトル
パイプで区切られたヘッダーが重複しています。
仮説
パイプ区切り記号ヘッダーの最初のフィールド = FOOID
パイプで区切られたフィールドにはカンマを含めることができます。
このawkスクリプトは、私のファイルから重複したパイプヘッダーを削除します。すべてのCSVレコードを無視するにはどうすればよいですか?
#!/usr/bin/awk -f
BEGIN{ FS="|"
header_f1 = "FOOID" }
{
if (NR==1) { print $0 }
if (NR>1 && $1 != header_f1 && length > 1) { print $0 }
}
希望する結果
FOOID|BIZNO|BARBIZ_CODE
00033567|0035952|A,KEEP
00034145|0036865|A,KEEP
00030527|0032479|Z4,KEEP
00034984|0037987|Z5,KEEP
00021826|0022008|Z5,KEEP
00026763|0029293|Z5,KEEP
ベストアンサー1
あなたの入力例を考えると、次のように動作するようです。
$ awk 'NR == 1 { print } /,/ && /\|/ { print }' input
FOOID|BIZNO|BARBIZ_CODE
00033567|0035952|A,KEEP
00034145|0036865|A,KEEP
00030527|0032479|Z4,KEEP
00034984|0037987|Z5,KEEP
00021826|0022008|Z5,KEEP
00026763|0029293|Z5,KEEP
常に最初の(タイトル)レコードを印刷します。その後、コンマと垂直バーのあるレコードのみが印刷されます。