列数を印刷し、空のフィールドがある場合は「エラー」、空のフィールドがない場合は「修正」を印刷します。

列数を印刷し、空のフィールドがある場合は「エラー」、空のフィールドがない場合は「修正」を印刷します。

次のCSVがあります。

column1, column2, column3, column4, column5,
1,,,,5,
1,2,3,,,
1,2,3,4,5
1,2,3,4,5,
1,2,,,5,

awkを使用してすべての行の数を印刷し、列に空のフィールドがない場合は「正しい」コメントを印刷し、列に1つ以上の空のフィールドがある場合は「エラー」コメントを印刷したいと思います。

私はこれを持っています:

cat test_results.csv | awk -F"," '{for(i=1;i<=NF;i++) if($i=="") print NR, "ERROR"; else print NR, "CORRECTO"}'
1 CORRECTO
1 CORRECTO
1 CORRECTO
1 CORRECTO
1 CORRECTO
1 ERROR
2 CORRECTO
2 ERROR
2 ERROR
2 ERROR
2 CORRECTO
and so on 

残念ながら、このコマンドは行のすべての空きスペースを検索し、見つかったすべての空で正しいフィールドの行番号を返します。

列に空のフィールドがない場合は、「正しい」コメントを持つ各列に対して単一の数値を取得するにはどうすればよいですか?

希望の出力:

1 ERROR
2 ERROR
3 ERROR
4 CORRECT
5 ERROR
6 ERROR

ベストアンサー1

$ awk -F, '{ count=0; for(i=1; i<=NF; i++) count+=$i=="" 
           print NR, count? "ERROR" :"CORRECT";
}' infile
1 ERROR
2 ERROR
3 ERROR
4 CORRECT
5 ERROR
6 ERROR

行番号の代わりに空の列の数を印刷するには、次の手順を実行します。

$ awk -F, '{ count=0; for(i=1; i<=NF; i++) count+=$i==""
             print count? count " ERROR":"All CORRECT"
  }' infile
1 ERROR
4 ERROR
3 ERROR
All CORRECT
1 ERROR
3 ERROR

おすすめ記事