我正在尝试获取总和,36962
以便$TOTAL
在脚本末尾与之呼应,但我无法使其起作用。有什么建议吗?这是一个学校项目,我对Bash感到非常生疏。
TOTAL=0
while read p; do
awk '{ if ($1 > 100 ) print TOTAL+=$1}'
echo $TOTAL
done < ipuniq.txt
该TOTAL
变量是一个shell变量,因此awk
不会知道。在您的awk
命令中,TOTAL
变量在每次迭代中均未设置,因此每次都将其重置为单个值,然后进行打印。
此外,awk
在这样的循环中使用似乎毫无意义。
awk
可以使用以下1个衬管自行执行此操作:
awk '$1 > 100 { total+=$1 } END { print total }' ipuniq.txt
无需循环或其他命令。
但是,如果您的作业需要使用bash / shell,则可以执行以下操作:
total=0
while read -r p _; do
((p>100)) && total=$((total+p))
done < ipuniq.txt
echo "$total"
这将使用Shell算术表达式来检查的值p
是否大于100,如果大于100,则会将其添加到中total
。
另外请注意:我已经在-r
您的read
命令中添加了该选项,因为这将按字面显示反斜杠(对于您的用例来说可能是不必要的,但我宁愿一直使用-r
,除非我有特别的理由不这样做)。
我还添加了_
参数名称,这将防止p
被设置为不需要的输入。read
会将所有剩余的单词分配给最后一个参数,因此在您的情况下,您的文件包含数字和IP,例如:
1 10.10.10.10
2 10.10.10.11
如果没有参数来解决问题,p
则将其设置为:
p='1 10.10.10.10'
然后:
p='2 10.10.10.11'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句