Sortieren von Dateien nach der Häufigkeit des Zeileninhalts

1

Stellen Sie sich vor, es gibt 3 Textdateien.

1.txt:

a
b
c

2.txt:

f
c
d

3.txt:

b
c
f

Wie sortiere ich sie nach Häufigkeit der einzelnen "Zeileninhalte" ? (Bei Kollisionen alphabetisch)

Ergebnis:

c
b
f
a
d
Samuel Shifterovich
quelle

Antworten:

4

Sie können verwendet werden sortund uniqdie Linien von Frequenzen zu sortieren.

sort *.txt | uniq -c | sort -k1,1nr -k2 | sed 's/^ *[0-9]* //'

Die Sekunde sortverwendet die Sekundärseite -k2, um die Zeilen derselben Frequenz alphabetisch zu sortieren. Das Finale sedentfernt nur die Frequenzen.

Choroba
quelle
Habe noch nicht getestet, werde aber annehmen und für den enthaltenen alphabetischen Teil stimmen. Vielen Dank.
Samuel Shifterovich
1
Keine Sorge, ich habe es vor dem Posten getestet :-)
Choroba
1

Sie können mit sort und uniq in absteigender Reihenfolge der Häufigkeit sortieren:

$ sort *.txt | uniq -c | sort -rn
      3 c
      2 f
      2 b
      1 d
      1 a

Wenn Sie die Zählung entfernen möchten:

$ sort *.txt | uniq -c | sort -rn | sed 's/[[:space:]]*[[:digit:]]*[[:space:]]//'
c
f
b
d
a

Beachten Sie, dass zwei Anrufe an sorterforderlich sind. Der erste Grund ist, dass uniq -ceine sortierte Eingabe erforderlich ist. Die zweite wird benötigt, um die Zeilen in absteigender numerischer Reihenfolge nach Anzahl (Häufigkeit) zu sortieren.

John1024
quelle