2013-08-18 33 views
1

我有格式的X Y Z ^矩阵中提取信息:awk中 - 从XYZ格式矩阵

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的知识实在是缺乏,我真的很感激任何帮助,任何人都可以提供。

在此先感谢。

回答

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 
+0

辉煌!这正是我所期待的。谢谢一堆。 – CatThatKilledCuriosity