希望有人能够为我指明正确的方向。我是 bash 脚本的新手,我相信 awk 应该能够解决这个问题。
我有多个文件要处理,$1 中的数据将始终保持不变,分隔符只是一个空格,$2 中的数字会改变.
我希望将多个文件中的 $2 相加并输出到一个新文件中。示例如下:
File1.txt
DATA:TEST0 20
DATA:TEST1 4
DATA:TEST2 39
DATA:TEST3 11
File2.txt
DATA:TEST0 2
DATA:TEST1 0
DATA:TEST2 26
DATA:TEST3 9
File3.txt
DATA:TEST0 44
DATA:TEST1 16
DATA:TEST2 21
DATA:TEST3 7
Output.txt 是我希望从上述文件中获得的输出
DATA:TEST0 66
DATA:TEST1 20
DATA:TEST2 86
DATA:TEST3 27
下面的方法我都试过了,还是不行
粘贴文件* | awk '{$2=$1+$2}1' | tee 输出.txt
如有任何建议,我们将不胜感激。提前致谢
最佳答案
paste
将文件并排放置,您不需要它。只需将所有文件名作为参数提供给 awk
,它就会按顺序处理它们。
对第 1 列中每个关键字的总和使用关联数组。
awk '{sum[$1] += $2} END {for (i in sum) print i, sum[i]}' file* | tee output.txt
要保持文件中的原始顺序,您可以返回使用粘贴
。然后你必须循环每隔一列,添加到一个总和变量。
paste file* | awk '{sum=0; for (i = 2; i <= NF; i+=2) sum += $i; print($1, sum)' | tee output.txt
关于bash - 将多个文件汇总为 1 个输出文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73055946/