2013-09-26 31 views
0

我需要總結大標籤=分隔文件中一列的頻率。使用命令行解析一列的頻率

一個例子是:

abbot achievement 1 
abbot acknowledge 2 
abbot acknowledge 2 
abbot acknowledge 3 
abbot acquaintance 1 
abbot acquire 2 
abbot acquisition 2 
abbot acre 1 
abbot acre 4 
abbot act 1 
abbot act 4 
abbot act 3 
abbot act 8 
abbot act 5 
abbot act 7 
abbot act 8 
abbot action 2 
abbot active 4 

我要總結的那些列1 & 2是對最終結果相同的頻率:

abbot achievement 1 
abbot acknowledge 7 
abbot acquaintance 1 
abbot acquire 2 
abbot acquisition 2 
abbot acre 5 
abbot act 36 
abbot action 2 
abbot active 4 

我已要求一個類似的問題here: 並使用以下命令: $ sort input.txt | uniq -c | awk'{print $ 2'\ t「$ 3」\ t「$ 1 * $ 4}''

但這並不能解決問題,因爲例如sort函數只會將所有三列相同,從所有三列中添加新的第一列和總計頻率。

任何人都可以建議對此命令的修改,將產生我想要的結果? 或者也許建議一個更好的途徑來解決這個問題?

回答

1

在陣列使用awk和總和

awk '{ a[$1 FS $2]+=$3 } END {for (i in a) print i,a[i] }' file 
abbot active 4 
abbot action 2 
abbot achievement 1 
abbot acre 5 
abbot acquire 2 
abbot acknowledge 7 
abbot acquisition 2 
abbot act 36 
abbot acquaintance 1 
+0

是,這並不工作,但是,它改變空間的每一列的標籤。是否可以修改此打印以保留列之間的製表符空格,還是需要在之後完成? – owwoow14

+1

將'FS'改爲'「\ t」',並在'abbot'和下一個字段之間得到標籤。要在每個添加了'OFS =「\ t」'的地方獲得標籤,就像這樣:'awk'{a [$ 1「\ t」$ 2] + = $ 3} END {for(in a)print i,a [i]} 'OFS =「\ t」' – Jotne