gnu sort / uniq: Sortierung nach Anzahl von Malen

632
719016

Wie kann ich GNU verwenden sortund uniqdie häufigsten Vorkommnisse anstelle der numerischen oder alphanumerischen Sortierung verwenden? Beispiel list.txt:

1 2 2 2 3 3 

Da '2' 3-mal vorkommt, sollte oben stehen, gefolgt von '3' und '1':

$ cat list.txt | "some sort/uniq magic combo" 2 3 1 
1

1 Antwort auf die Frage

4
Doug Harris

So was:

cat list.txt | sort | uniq -c | sort -rn 

Das -cbeinhaltet die Zählung jeder eindeutigen Zeile und dann sortieren Sie danach.

Wenn Sie die Zählung nach dem Sortieren entfernen möchten, tun Sie dies:

cat list.txt | sort | uniq -c | sort -rn | awk '{ print $2; }' 
Ich mache das schon seit Ewigkeiten, und für mittelgroße Aufgaben funktioniert es gut. Ich finde jedoch immer wieder Gigabytes an Protokolldaten, die durchgehen und eine Sortierung durchführen, für die viel Speicherplatz erforderlich ist, der für doppelte Zeilen gilt, die Sie im nächsten Schritt wegwerfen. Es gibt bessere Algorithmen, aber ich kenne keine guten einfachen Befehlszeilen-Tools, um dieses Problem in einem größeren Maßstab zu lösen. mc0e vor 9 Jahren 0