使用命令行汇总一列的频率

时间:2013-09-26 11:01:14

标签: awk command frequency

我需要总结一个大标签=分隔文件中一列的频率。

一个例子是:

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列和第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 个答案:

答案 0 :(得分: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