forループ変数を使用してbashで別のコマンドを実行する

forループ変数を使用してbashで別のコマンドを実行する

以下を計算するforループを実行したいと思います。awk10回実行して出力を合計して最終結果を印刷します。コードは以下に添付されています:

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を許可したい場合:310011e01.0

awk -v n=0 '
  $NF ~ /^([123456789]|10)$/ {n++}
  END {print n}' ./*

おすすめ記事