awk - 列全体のパターン数の計算

awk - 列全体のパターン数の計算

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+0count

修正版は

awk -F',' 'FNR>1 && $2!~/^E/{count++} END{print count+0}' FinalOutput.csv

FNRグローバルラインカウンタの代わりにファイル固有のラインカウンタを使用したため、NRこれはすべてのファイルにヘッダ行を持つ複数の入力ファイルでも機能します。つまり、次のように使用することもできます。

awk -F',' ' ... ' FinalOutput1.csv FinalOutput2.csv ...

おすすめ記事