在AWK中:计算选项卡分隔文件中的列中的发生次数,并将数据写入新的tsv文件

时间:2016-10-09 13:12:14

标签: database sorting unix

我将数据存储在一个大的(20Gb)制表符分隔文本文件中,如下面的示例(input.txt):

1234 567 T 0
1267 890 Z 1
1269 908 T 1
3142 789 T 0
7896 678 Z 0

我想计算第4列中每个条目的出现次数,并将其自动写入新的制表符分隔文件中。

我想在output.txt中看到以下内容:

0  3
1  2

有人建议用AWK快速做到这一点吗?

1 个答案:

答案 0 :(得分:1)

awk '{ count[$4]++ } END { for (i in count) printf "%s\t%d\n", i, count[i] }' \
    big.file.txt

对于第4列中的每个值,递增该值的计数器。最后,打印找到的每个值及其计数。这将以不确定的顺序打印值。如果您想按某种顺序使用它,可以使用sort对输出进行后处理,或者对awk中的键进行排序,然后按排序的键顺序打印。