Ich habe Apache
Protokolldatei, access.log
, wie kann man die Anzahl der Zeilenvorkommen in dieser Datei zählen? zum Beispiel das Ergebnis von cut -f 7 -d ' ' | cut -d '?' -f 1 | tr '[:upper:]' '[:lower:]'
ist
a.php
b.php
a.php
c.php
d.php
b.php
a.php
das Ergebnis, das ich will, ist:
3 a.php
2 b.php
1 d.php # order doesn't matter
1 c.php
Akzeptierte Antwort:
| sort | uniq -c
Wie in den Kommentaren angegeben.
Weiterleiten der Ausgabe an sort
organisiert die Ausgabe in alphabetischer/numerischer Reihenfolge.
Dies ist eine Voraussetzung, weil uniq
trifft nur auf wiederholte Zeilen zu, dh
a
b
a
Wenn Sie uniq
verwenden In dieser Textdatei wird Folgendes zurückgegeben:
a
b
a
Das liegt daran, dass die beiden a
s werden durch das b
getrennt – es handelt sich nicht um aufeinanderfolgende Zeilen. Wenn Sie jedoch zuerst die Daten in alphabetischer Reihenfolge sortieren, zuerst wie
a
a
b
Dann uniq
wird die sich wiederholenden Zeilen entfernen. Das -c
Option von uniq
zählt die Anzahl der Duplikate und liefert die Ausgabe in der Form:
2 a
1 b
Referenzen:
sort(1)
uniq(1)