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 次。
代码中有什么问题?
在以下位置完成整个操作会更有效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)