计算每行在文件中出现的次数

Che*_*eng 28 text-processing

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

A
A
A
B
CC
Run Code Online (Sandbox Code Playgroud)

我想要这样的输出:

A 3
B 1
CC 1
Run Code Online (Sandbox Code Playgroud)

Che*_*eng 30

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

$ uniq -c
Run Code Online (Sandbox Code Playgroud)

  • 另请注意,它只计算相邻的重复行。一个常见的习语是`sort | uniq` (15认同)
  • uniq 还将计数放在数据前面。原来的问题实际上需要这样的东西: sort filename | uniq -c | awk '{print $2, $1}' (4认同)

Dis*_*oat 17

我刚刚带着类似的问题来到这里。由此,我设法组合了一个稍微高级的命令,我希望它对其他人有用。

正如 Steven D 在上面的评论中所说,uniq只计算相邻的重复行,因此您需要先对行进行排序。之后,我们找到唯一的行,然后再次排序,使出现次数最多的行位于顶部。

sort file.txt | uniq -c | sort -nr > output.txt
Run Code Online (Sandbox Code Playgroud)

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

  • 你可以替换`cat file.txt | sort` 只使用 `sort file.txt`。:) (4认同)