Bash 如何对出现次数超过X的行进行排序、uniq和显示
我有这样一个文件:Bash 如何对出现次数超过X的行进行排序、uniq和显示,bash,sorting,uniq,Bash,Sorting,Uniq,我有这样一个文件: 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.
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
将输出从
uniq-cd
馈送到awk
sort test.file | uniq -cd | awk -v limit=2 '$1 > limit{print $2}'
使用纯
awk
:
awk '{a[$0]++}END{for(i in a){if(a[i] > 2){print i}}}' a.txt
它遍历文件并统计每个IP的发生次数。在文件末尾,它会输出每一个发生2次以上的IP。Perfect!谢谢,这个对我有用:cat log.txt | sort | uniq-d-c | awk'$1>30{print$2}'这是一个更干净、更简单的解决方案。。感谢you@Kent感谢贝尔实验室!:)