计算每行在文件中出现多少次


23

说我有一个文件,其中包含:

A
A
A
B
CC

我想要这样的输出:

A 3
B 1
CC 1

Answers:


23

我想到了; 之一uniq的选择是-c,对‘通过的出现次数前缀线’:

$ uniq -c

1
请注意,将数字放在第一位。如果您对命令uniq -c filename.txt | sed 's/[^0-9]*\\([0-9]\+\\) \\(.*\\)/\2 \1/'
不满意

12
另请注意,它仅计算相邻的重复行。常见的成语是sort | uniq
史蒂文D

4
uniq还将计数放在原点前面。最初的问题实际上需要这样的东西:uniq -c | awk'{print $ 2,$ 1}'
Bruce Ediger

如果以上注释不清楚,则必须确保首先对数据进行排序才能实现目标。如果未排序,则将有重复的条目。例如,如果您的原始文件是A \ A \ A \ B \ A \ CC,则just的输出uniq -c将显示A 3,稍后显示A 1。首先排序,将确保所有相同的行组合在一起
drootang

16

我只是来这里遇到类似的问题。由此,我设法整理了一个稍微高级的命令,希望对其他人有用。

正如史蒂文·D(Steven D)在上面的评论中所述,uniq仅对相邻的重复行进行计数,因此您需要首先对行进行排序。之后,我们找到唯一的行,然后再次排序,以便最常出现的行在最上面。

sort file.txt | uniq -c | sort -nr > output.txt

输出重定向到文件中output.txt。如果只想在命令行上查看结果,请删除重定向并将最后一个命令更改为,sort -n以便最常用的行位于底部,即绝对仍在屏幕上。


4
您可以替换cat file.txt | sort为just sort file.txt。:)
mattdm 2011年

1
@mattdm:这种表述的缺点是您不能cat用更有趣的东西快速替换它。因为,您知道没有cat
SamB

1
@SamB然后将其写为< file.txt sort | uniq -c。这很容易编辑,仍然避免了不必要的操作cat
hvd
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.