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
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:
Sie können verwendet werden sort
und uniq
die Linien von Frequenzen zu sortieren.
sort *.txt | uniq -c | sort -k1,1nr -k2 | sed 's/^ *[0-9]* //'
Die Sekunde sort
verwendet die Sekundärseite -k2
, um die Zeilen derselben Frequenz alphabetisch zu sortieren. Das Finale sed
entfernt nur die Frequenzen.
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 sort
erforderlich sind. Der erste Grund ist, dass uniq -c
eine sortierte Eingabe erforderlich ist. Die zweite wird benötigt, um die Zeilen in absteigender numerischer Reihenfolge nach Anzahl (Häufigkeit) zu sortieren.