0

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

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

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)的某种组合来获取此信息。等等?

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

任何帮助将不胜感激。

4

2 回答 2

2
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
于 2014-10-01T10:35:20.610 回答
1

这是我正在使用的脚本。它仍处于测试阶段,但它可以用作其他人的基础:

with open(file_name, mode="r") as bigfile:
reader = bigfile.read()

d = dict()
for res in reader.split('Separator'):
  if res in d:
    d[res]= d[res]+1
  else:
    d[res]=1

for k in d:
  print str(k) + ':' + str(d[k])
于 2014-10-01T10:29:41.283 回答