Answers:
假设每行有一个数字:
sort <file> | uniq -c
您也可以--count
在GNU版本中使用更详细的标志,例如在Linux上:
sort <file> | uniq --count
sort
像这样再次使用:sort <file> | uniq -c | sort -n
这将仅打印重复的行,计数:
sort FILE | uniq -cd
或者,使用GNU长选项(在Linux上):
sort FILE | uniq --count --repeated
在BSD和OSX上,您必须使用grep过滤出唯一的行:
sort FILE | uniq -c | grep -v '^ *1 '
对于给定的示例,结果将是:
3 123
2 234
如果要打印所有行的计数,包括仅出现一次的行:
sort FILE | uniq -c
或者,使用GNU长选项(在Linux上):
sort FILE | uniq --count
对于给定的输入,输出为:
3 123
2 234
1 345
为了对最上面的行最频繁的输出进行排序,您可以执行以下操作(获取所有结果):
sort FILE | uniq -c | sort -nr
或者,仅重复行,最频繁出现
sort FILE | uniq -cd | sort -nr
在OSX和BSD上,最后一个变为:
sort FILE | uniq -c | grep -v '^ *1 ' | sort -nr
| sort -n
或| sort -nr
将按重复计数(分别为升序或降序)对输出进行排序。这不是您要的内容,但我认为可能会有所帮助。
| awk '$1>100'
通过 awk:
awk '{dups[$1]++} END{for (num in dups) {print num,dups[num]}}' data
在awk 'dups[$1]++'
命令中,变量$1
保存column1的全部内容,方括号是数组访问权限。因此,对于文件中每一行的第一列,data
命名数组的节点dups
都会增加。
最后,我们dups
使用num
as变量遍历数组,并先打印保存的数字,然后打印重复值的数字dups[num]
。
请注意,您的输入文件在某些行的末尾有空格,如果您将其清除,则可以$0
代替$1
上面的in命令使用:)
uniq
吗?
sort | uniq
与awk解决方案在性能和资源折衷方面有很大不同:如果文件很大且行数较少,则awk解决方案效率更高。行数是线性的,空间使用量是不同行数的线性。OTOH,awk解决方案需要将所有不同的行保留在内存中,而(GNU)排序可以求助于临时文件。