何千もの文字列が2番目の列にある場合は1つずつ検索する必要があり、そうでない場合は行の2番目の列にない各文字列に対して操作を実行する必要があります。
文書:
line a
line b
line c
line z
line d
line e
line z
line z
ファイル2:
line a
line b
line c
line d
line e
私が試したこと:
$ awk '{if($2=="z") {c++} } END { if(c==0) {print "no \"z\""} else { print c" \"z\"" }}' file
3 "z"
$ awk '{if($2=="z") {c++} } END { if(c==0) {print "no \"z\""} else { print c" \"z\"" }}' file2
no "z"
$ awk '{if($2=="z") {c++} } END { if(c!=0) {print "no \"z, action will be done\""} }' file
no "z, action will be done"
私のコードは大丈夫ですか、それとも単純化/最適化できますか?
アップデート:@RomanPerekhrestはあなたのコードを参照しています。 「else」だけを処理するか、「c」に否定を追加するには?そして残りは無視しますか?
私は努力しています:(c?:「いいえ」)、
しかし、うまくいきません。
@αГsнιе、ありがとうございます。ついに動作するスクリプトができました。
$ awk -v s="z" '$2==s{ c++ }END{ printf (!c ? NOP : "prepare command1\nprepare command2\nprepare command3\n") }' file
prepare command1
prepare command2
prepare command3
$ awk -v s="z" '$2==s{ c++ }END{ printf (!c ? NOP : "prepare command1\nprepare command2\nprepare command3\n") }' file2
$
または
$ awk -v s="z" '$2==s{ c++ }END{if(c==0) printf "prepare command1\nprepare command2\nprepare command3\n" }' file2
prepare command1
prepare command2
prepare command3
$ awk -v s="z" '$2==s{ c++ }END{if(c==0) printf "prepare command1\nprepare command2\nprepare command3\n" }' file
$
ベストアンサー1
渡すawk
動的変数/パラメータ-v <var>=<value>
:
文字列テストケースz
:
awk -v s="z" '$2==s{ c++ }END{ printf "%s \042%s\042\n", (c? c : "no"), s }' file
出力:
3 "z"
文字列テストケースw
:
awk -v s="w" '$2==s{ c++ }END{ printf "%s \042%s\042\n", (c? c : "no"), s }' file
出力:
no "w"