【发布时间】:2014-01-15 14:29:28
【问题描述】:
我有一个包含 n 列的文件(不知道提前多少列)。我需要对具有相同 column1 值的列求和并打印它们。除第一列外,所有列都是数字。例如
file1.txt
col1 col2 col3 ... colN
val1 3000 1000 ... 5000
val2 3000 1000 ... 5000
val1 1000 2000 ... 3000
预期输出:
col1 col2 col3 ... colN
val1 4000 3000 ... 8000
val2 3000 1000 ... 5000
我试过了:
awk '{sums[$1] += $2} END { for (i in sums) printf("%s %s\n", i, sums[i])}' file1.txt | sort
这仅打印前两列。我需要添加并打印所有列。
【问题讨论】:
-
在我看来这完全是正确的想法,但您需要遍历每个字段并为每个字段计算总和。您可以使用
sums[$1,i](假设您的循环变量是i)根据$1的值和字段编号创建一个数组索引。然后你的 END 循环只需要从 1 走到 X (在某个点保存 NF 并使用它假设你所有的行都是相同的长度)并打印出顺序字段。
标签: awk