将 bash 中的 for 循环变量用于其他命令

9f2*_*e21 3 bash awk shell-script

我想运行一个 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
Run Code Online (Sandbox Code Playgroud)

问题是,如果我$NF==$i改为$NF==1,那么结果是正确的,但我想使用 for 循环运行 10 次。

代码中有什么问题?

Sté*_*las 7

在以下位置完成整个操作会更有效awk:

awk -v n=0 '
  {for (i = 1; i <= 10; i++) if ($NF == i) {n++; break}}
  END {print n}' ./*
Run Code Online (Sandbox Code Playgroud)

或者如果最后一个字段总是一个整数:

awk -v n=0 '
  $NF >= 1 && $NF <= 10 {n++}
  END {print n}' ./*
Run Code Online (Sandbox Code Playgroud)

或者,如果您希望比较是词法的,并且只允许1, 2, 3...,10这些数字的表示(不是01, 1e0, 1.0...):

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