Linux 命令或脚本计算文本文件中重复的一堆行?

标签 linux text awk count duplicate-detection

我正在寻找类似 this 的内容,但我不需要计算重复行的数量,而是需要计算重复行的数量。

为了清楚起见,我有一个这样的文件:

Separator
line11
line12
line13
Separator
line21
line22
line23
Separator
line11
line12
line13
Separator
line11
line12
line13
Separator
line31
line32
line33
Separator
line21
line22
line23

我希望输出如下

3:    Separator
      line11
      line12
      line13
2:    Separator
      line21
      line22
      line23
1:   Separator
      line31
      line32
      line33

其中:3:、2:和1:表示每串行在文件中出现的次数。

我尝试了以下命令但没有成功:

sort all_lits.txt | uniq -c

目前我正在编写一个 awk 命令以获取信息,但还不清楚。一旦我得到一些命令来显示,我就会发布它。

是否可以使用一些 UNIX 工具组合(例如 awk、grep、wc、sort)来获取此信息。等等?

我知道我可以写一个脚本来做到这一点,但我想避免这样做。在极端情况下我会这样做。

我们将不胜感激任何帮助。

最佳答案

awk -v RS=Separator '
    NR>1 {count[$0]++}
    END {for (bunch in count) print count[bunch], RS, bunch}
' file
1 Separator 
line31
line32
line33

2 Separator 
line21
line22
line23

3 Separator 
line11
line12
line13

输出没有内在的顺序。如果您想按计数降序排序,并且您使用的是 GNU AWK:

awk -v RS=Separator '
    NR>1 {count[$0]++}
    END {
        PROCINFO["sorted_in"] = "@val_num_desc"
        for (bunch in count) print count[bunch], RS, bunch
    }
' file

关于Linux 命令或脚本计算文本文件中重复的一堆行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26138780/

相关文章:

c++ - 如何使用 BuildMI() 在 LLVM 的 MachineFunctionPass 中正确插入机器指令?

c - dladdr 不返回函数名

c - 此文本文件上的 fscanf() 错误?

AWK - 使用 getline 将变量传输到系统 ()?

linux - Bash 或 Awk 脚本合并 X 个字段匹配的行,同时在不匹配的字段中创建范围

awk - 如何删除数组并为标量变量重用相同的名称?

linux - stat() 系统函数在 Linux 7.6 中不起作用

linux - linux同步串口读取功能

sql - Postgresql:文本/varchar 的行内与行外

java - 我们如何用下划线替换重复的单词,Java‽