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 コマンドを作成していますが、まだ明確なものはありません。表示するコマンドを取得したらすぐに、それを公開します。

awk、grep、wc、sort などの UNIX ツールの組み合わせを使用して、この情報を取得することは可能ですか。など?

それを行うためのスクリプトを作成できることは知っていますが、そうするのは避けたいと思います。極端な場合はそうします。

どんな助けでも大歓迎です。

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 に答える