Awk - 从xyz格式矩阵中提取信息

时间:2013-08-18 03:57:19

标签: matrix awk

我有一个格式为x y z的矩阵:

1 1 0.02
1 2 0.10
1 4 0.22
2 1 0.70
2 2 0.22
3 2 0.44
3 3 0.42

......等等。我有兴趣对特定x值(第1列)的所有z值(第3列)求和并在单独的行上打印输出(使用x值作为前缀),这样前一个例子的输出就会显示为:

1 0.34
2 0.92
3 0.86

我强烈认为awk是正确的工具,但是awk的知识确实缺乏,我真的很感激任何人都可以提供的任何帮助。

提前致谢。

1 个答案:

答案 0 :(得分:3)

我同意awk是这项工作的好工具 - 这正是它的设计任务。

awk '{ sum[$1] += $3 } END { for (i in sum) print i, sum[i] }' data

对于给定的数据,我得到了:

2 0.92
3 0.86
1 0.34

显然,您可以将输出传输到sort -n,然后按排序顺序获取结果。

要使用awk按排序顺序获取,您必须超出POSIX awk的范围并使用GNU awk扩展函数asorti

gawk '{ sum[$1] += $3 }
      END { n = asorti(sum, map); for (i = 1; i <= n; i++) print map[i], sum[map[i]] }' data  

输出:

1 0.34
2 0.92
3 0.86