所以我正在运行一个randomfile,它可以接收未显示的几个参数($ 1和$ 2),然后通过参数传递内容...
使用第三个参数,我应该在file1中搜索$ 3(或不是$ 3),并将此实例的数量添加到file2中...
这工作正常:
cat file1 | grep $3 | wc -l | while read line1; do echo $3 $line1 > file2; done
cat file1 | grep -v $3 | wc -l | while read line2; do echo not $3 $line2 >> file2; done
现在,我正在尝试读取包含搜索实例的file2,我想要获取文件中的数字,获取总和,然后追加到file2。因此,例如,如果$ 3是“ baby”:
file2将包含-
baby 30
not baby 20
然后我想得到20和30的总和并附加到同一file2,因此它看起来像-
baby 30
not baby 20
total 50
这是我目前所拥有的:
cat file2 | grep -o '[0-9]*' | while read num ; do sum=$(($sum + $num));echo "total $sum" >> file2; done
我的file2最后以总计的两行显示,其中之一是我需要的-
baby 30
not baby 20
total 30
total 50
我在这里想念什么?
发生这种情况是因为您的回声在for循环内。
显而易见的解决方案是将其移至for循环之外,但是如果尝试执行此操作,则会发现未设置$ sum,这是因为while循环和管道实际上是作为它们自己的进程生成的。您可以使用大括号({}
)对命令进行分组来解决此问题:
cat file2 | grep -o '[0-9]*' | { while read num ; do sum=$(($sum + $num)); done; echo "total $sum" >> file2; }
其他答案的确指出了执行此操作的更好方法,但这有望帮助您了解正在发生的事情。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句