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

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.


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.