何千もの文字列が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"
答え2
私がこれを正しく理解したら、2番目の列に特定のアルファベットがあることを確認したい場合は、awk
以下のスクリプトを試してください。このスクリプトはどれがあり、その数があるのか、どれが"NOT FOUND!"
メモがないかを報告します。
awk -v alphabet="$(printf "%s" {a..z})" 'BEGIN{ split(alphabet, arr, "") }
{ chrs[$2]++ } END{ for(y in chrs) for(x in arr)
{ if(arr[x] in chrs) {print y, chrs[y]; delete arr[x]; break }
else{ print arr[x]" NOT FOUND!"; delete arr[x] }
}
}' infile
出力:
w 1
z 3
a 1
b 1
c 1
f NOT FOUND!
g NOT FOUND!
h NOT FOUND!
i NOT FOUND!
j NOT FOUND!
k NOT FOUND!
l NOT FOUND!
m NOT FOUND!
n NOT FOUND!
o NOT FOUND!
p NOT FOUND!
q NOT FOUND!
r NOT FOUND!
s NOT FOUND!
t NOT FOUND!
u NOT FOUND!
v NOT FOUND!
d 1
x NOT FOUND!
y NOT FOUND!
e 1