Holen Sie sich die am häufigsten vorkommenden Zeilen aus einer Datei unter Linux

11

Ich habe eine Textdatei mit verschiedenen Wörtern pro Zeile.
Wie kann ich die 12 am häufigsten vorkommenden Zeilen in der Datei finden und anzeigen?
Ich bin nicht sehr gut mit Skriptbefehlen.

Wenn ich den Befehl und eine Erklärung bekommen könnte, damit ich verstehen kann, wie man ihn benutzt, und mein Wissen über Befehle erweitern kann, wäre es großartig!

Jim
quelle
stackoverflow.com/questions/16922357/…
Ciro Santilli 3 改造 中心 中心 六四

Antworten:

21

Sie können dies einfach mit integrierten Befehlen tun.

  • Füttere den Inhalt der Datei sort. Wir brauchen das für den nächsten Schritt.
  • Das geht an uniq -c. Es wird das eindeutige Vorkommen jeder Zeile gezählt. Wenn die ähnlichen Zeilen nicht benachbart sind, hätte dies ohne vorheriges Sortieren nicht funktioniert.
  • Führen Sie es dann einem anderen zu sort, der nun in umgekehrter Reihenfolge ( r) sortiert und auf der numerischen ( n) Interpretation der uniqAusgabe basiert . Wir brauchen die numerische Option, da sonst das Leerzeichen vor den Zahlen zu falschen Ergebnissen führen würde (weitere Informationen finden Sie in sortder Hilfe von GNU ).
  • Schließlich zeigen nur die ersten zwölf Zeilen mit head.

Der Befehl wäre dann:

sort test.txt | uniq -c | sort -rn | head -n 12

Die Ausgabe hier enthält die tatsächliche Anzahl der Vorkommen.

Um nur die unformatierte Liste der Zeilen zu erhalten, können Sie die Ausgabe an sedfolgende Adresse weiterleiten :

sort test.txt | uniq -c | sort -rn | head -n 12 | sed -E 's/^ *[0-9]+ //g'

Beispiel:

I'm not there very often
I'm not there very often
Look at me!
Look at me!
Look at me!
Hello there!
Hello there!
Hello there!
Hello there!
Hello there!
Hello there!

Ausgabe vom ersten Befehl, aber nur Auswahl von 2 aus head:

6 Hello there!
3 Look at me!

Ausgabe des zweiten Befehls:

Hello there!
Look at me!
slhck
quelle
1
Sie müssen es vor der Verwendung sortieren uniq.
cYrus
@slhck: Danke! Eine Frage: Die sort -rnSortierungen in umgekehrter Reihenfolge unter Verwendung der Nummer neben jeder Zeile, die von erzeugt wird, als Sortierfeld uniq -c? Ich dachte, dass so etwas k1oder so etwas verwendet werden würde
Jim
@ Jim Genau. rkehrt um und nsortiert numerisch nach der von uniq. Was genau meinst du damit k1?
Slhck
@slhck: Ich habe versucht, diese Befehle mit herauszufinden, manund ich habe verstanden, dass eine Syntax mit -ketwas verwendet werden muss, um das Feld zu sortieren, nach dem sortiert werden soll
Jim
@cYrus: Was ist der Randfall, dass vorher eine Sortierung benötigt wird?
Jim
3

Wenn Ihre Distribution Logtop hat

cat your_file | logtop

Wenn Ihre Datei wie eine Protokolldatei ständig wächst, versuchen Sie Folgendes:

tail -f your_log | logtop
Julien Palard
quelle