
Ich habe eine Textdatei, die pro Zeile verschiedene Wörter enthält.
Wie kann ich die 12 am häufigsten vorkommenden Zeilen in der Datei finden und anzeigen?
Ich bin nicht sehr gut mit Skriptbefehlen.
Es wäre großartig, wenn ich den Befehl und eine Erklärung bekommen könnte, damit ich die Verwendung verstehe und mein Wissen über Befehle erweitern kann!
Antwort1
Dies können Sie ganz einfach mit integrierten Befehlen tun.
- Geben Sie den Inhalt der Datei ein
sort
. Diesen benötigen wir für den nächsten Schritt. - Dies geht an
uniq -c
. Es wird das eindeutige Vorkommen jeder Zeile gezählt. Wenn die ähnlichen Zeilen nicht nebeneinander liegen, hätte dies ohne vorheriges Sortieren nicht funktioniert. - Dann füttere es an einen anderen
sort
, der nun in umgekehrter Reihenfolge (r
) sortiert und auf der numerischen (n
) Interpretation deruniq
Ausgabe sortiert. Wir brauchen die numerische Option, da sonst das Leerzeichen vor den Zahlen zu falschen Ergebnissen führen würde (sieheGNUsort
Hilfefür mehr). - Zeigen Sie abschließend nur die ersten zwölf Zeilen mit an
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 reine Zeilenliste zu erhalten, können Sie die Ausgabe an Folgendes weiterleiten sed
:
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 des ersten Befehls, aber nur Auswahl von 2 aus head
:
6 Hello there!
3 Look at me!
Ausgabe des zweiten Befehls:
Hello there!
Look at me!
Antwort2
Wenn Ihre Distributionlogtop
cat your_file | logtop
Wenn Ihre Datei ständig wächst, z. B. eine Protokolldatei, versuchen Sie Folgendes:
tail -f your_log | logtop