bash - 将多个文件汇总为 1 个输出文件

标签 bash awk

希望有人能够为我指明正确的方向。我是 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/

相关文章:

linux - 打开终端以发出一个命令

linux - 终端 vs. 中的命令bash.sh

linux - 整个文件中的awk定界符

awk - Bash 提取三位数版本的第一个数字

linux - 使用带有 sed 的 bash 脚本修改文件

bash - 提取与模式匹配的部分行

linux - 在 bash-3.2$ 中找不到命令

json - 使用 jq select 过滤 json 不起作用

xml - 更新 xml 值的脚本

linux - awk unix 插入文件位置目录