2つの列を持つ次のcsvファイルがあります。
Header1,Header2
AU3CB0222255,EBFXFR
AU3CB0222271,DBFXFR
AU3CB0225233,DBFXFR
AU3CB0225662,DBFXFR
AU3CB0226264,DBFXFR
で始まらない2列のフィールド数を計算したいと思いますE
。
次のコマンドを試しましたが、正しく機能しません。
awk '$2 !~ /^E_/ { count++ }END{ print count }' FinalOutput.csv
ベストアンサー1
コマンドawk
にはいくつかの問題があります。
- フィールド区切り文字を指定しなかったため、
awk
代わりにスペースに行が分割されます,
。-F','
コマンドラインオプションを使用してフィールド区切り文字を設定できます。 - あなたの正規表現には、次に始まらないフィールド(列2の値なし)を見つける
/^E_/
ように指定されています。E_
いいえで始まらないものだけですE
。削除する_
。 - コマンドはヘッダー行も計算します。
FNR
内部変数を使用できます(現在行番号に自動的に設定されます)。現在のファイル内で) は最初の行を除外します。 - Rakesh Sharmaが指摘したように、みんなで始まる行の場合、初期化されていない変数を使用すると、
E
コマンドは最後に空の文字列を出力します。代わりに印刷して強制的に数値として解釈する0
ことができます。count+0
count
修正版は
awk -F',' 'FNR>1 && $2!~/^E/{count++} END{print count+0}' FinalOutput.csv
FNR
グローバルラインカウンタの代わりにファイル固有のラインカウンタを使用したため、NR
これはすべてのファイルにヘッダ行を持つ複数の入力ファイルでも機能します。つまり、次のように使用することもできます。
awk -F',' ' ... ' FinalOutput1.csv FinalOutput2.csv ...