2013-08-18 92 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