![使用脚本生成的输出值在文件中添加值](https://linux22.com/image/13320/%E4%BD%BF%E7%94%A8%E8%84%9A%E6%9C%AC%E7%94%9F%E6%88%90%E7%9A%84%E8%BE%93%E5%87%BA%E5%80%BC%E5%9C%A8%E6%96%87%E4%BB%B6%E4%B8%AD%E6%B7%BB%E5%8A%A0%E5%80%BC.png)
我有一个 txt/log 文件,其中包含数据- cat sample.log/(.txt)
500,3,2
正在运行的脚本会覆盖sample.log 中的值。我希望数据与其各自的行相加,而不是覆盖/或生成新行。
例子:
Sample.log -500,3,1
Script out- 600,4,3
最终输出需要存储在sample.log
1100,7,4
每次脚本运行时,它都会不断添加相应的值。
请帮我得到这个输出。
答案1
这是使用 GNU awk 执行此操作的一种方法,其中调用脚本script.sh
并调用现有的总文件/tmp/sample.log
:
script.sh|\
cat /tmp/sample.log -|\
awk -F, '{for (f=1;f<=NF;f++) TOT[f]+=$f} END {for (f=1;f<length(TOT);f++) printf TOT[f]","; print TOT[length(TOT)]}' >/tmp/sample1.log
mv -f /tmp/sample1.log /tmp/sample.log
的输出script.sh
被组合(作为一行放在)现有的sample.log
,然后将这两行相加awk
,并将结果用于替换sample.log
这适用于任意数量的字段(不必保持一致)。分隔符设置为逗号,但这很容易更改。
答案2
尝试了以下步骤
sh script >scriptout
cat sample.log scriptout|awk -F "," 'BEGIN{sum=0;kum=0;jum=0} OFS =","{sum=sum+$1}{kum=kum+$2}{jum=jum+$3}END{print sum,kum,jum}' > final_out
mv final_out sample.log