以下を計算するforループを実行したいと思います。awk
10回実行して出力を合計して最終結果を印刷します。コードは以下に添付されています:
sum=0
for i in {1..10}
do
count=`awk '{if ($NF==$i) {print $NF}}' * | wc -l`
sum=$[sum+count]
echo $sum
done
問題は、に変更すると$NF==$i
結果$NF==1
は正確ですが、forループを使用して10回実行したいということです。
コードには何の問題がありますか?
ベストアンサー1
以下では、すべての作業を実行する方が効率的ですawk
。
awk -v n=0 '
{for (i = 1; i <= 10; i++) if ($NF == i) {n++; break}}
END {print n}' ./*
または最後のフィールドが常に整数の場合:
awk -v n=0 '
$NF >= 1 && $NF <= 10 {n++}
END {print n}' ./*
または、語彙比較をしたい場合、これらの数字の表現(1
、、...の代わりに)のみ2
を許可したい場合:3
10
01
1e0
1.0
awk -v n=0 '
$NF ~ /^([123456789]|10)$/ {n++}
END {print n}' ./*