これは私の後継です。前の質問。
私は/ etc / passwdのフィールド数を確認するためにこの便利なコードスニペットを使用しています。次の例では、ユーザー「fieldcount1」と「fieldcount2」のフィールド数が正しくありません。
$ awk -F: ' NF!=7 {print}' /etc/passwd
fieldcount1:x:1000:100:fieldcount1:/home/fieldcount1:/bin/bash::::
fieldcount2:blah::blah:1002:100:fieldcount2:/home/fieldcount2:/bin/bash:
$ echo $?
0
awk が状態 0 で終了するのがわかります。その観点からは、ここに問題はありません。
私はこのawkステートメントをシェルスクリプトに統合したいと思います。すべてのエラー行を印刷し、戻りコードを1(エラー)に設定したいと思います。
特定の終了ステータスを強制的に適用しようとすることができますが、awkは1行だけ印刷します。
$ awk -F: ' NF!=7 {print ; exit 1}' /etc/passwd
fieldcount1:x:1000:100:fieldcount1:/home/fieldcount1:/bin/bash::::
$ echo $?
1
awkをステータス "1"に強制終了し、一致するすべての行を印刷できますか?
答え1
状態を変数に保存し、END
ブロックで使用します。
awk -F: 'NF != 7 {print; err = 1}
END {exit err}' /etc/passwd
答え2
私は一致するものがなければ1で終わるGrepに似たものを探していました。これはAwkと同じです。
#!/usr/bin/awk -f
BEGIN {
b1 = 1
}
index($0, "sunday") > 0 {
b1 = 0
print
}
END {
exit b1
}
答え3
これはOPの正確な要求には応答しませんが、もしあなたがただ戻りコードに興味を持っていいえこのような一致行を印刷する必要がある場合は、grep -q
最初の一致後に終了するように@geekasaurの回答を変更できます。大規模な入力ファイルの場合、ファイルの最初にエラーが発生すると時間が節約されます。/etc/passwd
資格がないことを願っています!
awk -F: 'NF != 7 {err = 1; exit;}
END {exit err}' /etc/passwd