単純なファイル整合性チェックスクリプトを作成しようとしています。 ID、edname、名前、姓、サフィックス、電子メールを含む12個のCSVファイルを含むディレクトリがあります。
私は最初のフィールドに数字が含まれていて空でないことを確認するためにawkスクリプトを書くのが好きです。フィールド番号3、4、6は空ではなく、ファイルには6つ以上の6つのフィールドが含まれています。これらの条件がすべてtrueの場合は何も起こりませんが、そのいずれかが失敗すると、ファイル名は.badに変更されます。 。これは私が持っているものですが、列4,6の欠落値を取得できません。
for f in *.csv; do
awk -F, '!(NF==6 && $1+0==$1 && $3$4$6!=""){f=1; exit} END{exit f}' "$f" || mv "$f" "$f".bad;
done
答え1
Steeldriverがコメントで指摘したように、3つのフィールドのうちの1つが空でない場合、3番目のテストはtrueになります。私はあなたが実際に次のようなことをしたいと思います。
for f in *.csv; do
awk -F, '!(NF==6 && $1+0==$1 && $3!="" && $4!="" && $6!=""){f=1; exit}
END{exit f}' "$f" || mv "$f" "$f".bad;
done
答え2
空でないことを確認したい場合は、文字列比較を実行する必要はありません。空の文字列は false なので、次のようになります。
awk -F, 'BEGIN {flag=0} !(NF==6 && $1+0==$1 && $3 && $4 && $6) {flag=1} END {exit flag}'