如何对出现次数超过X次的行进行排序、去重和显示

16

我有一个这样的文件:

80.13.178.2
80.13.178.2
80.13.178.2
80.13.178.2
80.13.178.1
80.13.178.3
80.13.178.3
80.13.178.3
80.13.178.4
80.13.178.4
80.13.178.7

我需要显示重复行的唯一条目(类似于uniq -d),但仅限于出现次数多于两次的条目(“两次”仅为示例,因此可以灵活定义下限)。

对于查找三个或更多次出现的条目,此示例的输出应如下所示:

80.13.178.2
80.13.178.3
2个回答

24

uniq -cd的输出传递给awk

sort test.file | uniq -cd | awk -v limit=2 '$1 > limit{print $2}'

太好了!谢谢,这个对我有用:cat log.txt | sort | uniq -d -c|awk '$1 > 30{print $2}' - Andrew Kennen
1
这是一个更加清晰、简单的解决方案。谢谢。 - Krishna Vedula

11

使用纯 awk

awk '{a[$0]++}END{for(i in a){if(a[i] > 2){print i}}}' a.txt 
它遍历文件并计算每个IP出现的次数。在文件末尾,它输出每个出现超过2次的IP。
它迭代文件,统计每一个IP出现的次数,在文件结束时输出所有出现超过2次的IP.

@Kent 感谢贝尔实验室!:) - hek2mgl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接