一个衬管命令,用于提取非常长文件中的ID出现次数

时间:2014-04-17 06:33:13

标签: bash awk grep

我有以下非常庞大的文件(百万行),格式如下:

时间戳,ID,GUID

示例:

2014-04-14 23:59:59,754 2294 123B24C6452231DC1770FE37E6F3D51168
2014-04-14 23:59:59,757 102254 B9E0CE6C9F67745326F9FD07C5B31B4E1D65

ID是一个数字,可以是单个数字和最多6个数字。 GUID具有恒定长度(如上所述)。

我想获得文件中每个ID的#of occurrence。

输出应该类似于:

Count, ID
8 2294
15 102254

...

我试图用一个grep使用uniq来获得这个并且排序没有太多成功。

感谢帮助。

2 个答案:

答案 0 :(得分:3)

如果字段之间有单个空格(如示例所示)而不是逗号(如格式),那么您可以使用:

cut -d' ' -f3 hugefile | sort | uniq -c

另一种选择,如果分隔符可能是几个空格:

awk '{print $3}' hugefile | sort | uniq -c

你也可以在awk程序(未经测试)中完成所有工作:

awk '{c[$3]++} END { for (n in c) print c[n], n }' hugefile

答案 1 :(得分:0)

你可以使用它,

grep -Po '(?<= )[0-9]+ ' yourfile | sort | uniq -c