it-swarm.com.de

Sortieren Sie die uniq-IP-Adresse im Apache-Protokoll

Ich versuche, IP-Adressen aus meinem Apache-Protokoll zu extrahieren, zu zählen und zu sortieren.

Und aus welchem ​​Grund auch immer, das Sortieren ist schrecklich.

Hier ist der Befehl:

cat access.* | awk '{ print $1 }' | sort | uniq -c | sort -n

Ausgabebeispiel:

  16789 65.X.X.X
  19448 65.X.X.X
   1995 138.X.X.X
   2407 213.X.X.X
   2728 213.X.X.X
   5478 188.X.X.X
   6496 176.X.X.X
  11332 130.X.X.X

Ich verstehe nicht, warum diese Werte nicht wirklich sortiert sind. Ich habe auch versucht, Leerzeichen am Anfang der Zeile (sed 's/^[\t ]*//g') zu entfernen und sort -n -t" " -k1 zu verwenden, was nichts ändert.

Irgendein Hinweis?

32
Arthur

Dies kann zu spät sein, aber wenn Sie die Zahl in der ersten Sortierung verwenden, erhalten Sie das gewünschte Ergebnis.

cat access.log | awk '{print $1}' | sort -n | uniq -c | sort -nr | head -20

Ausgabe: 

 29877 93.xxx.xxx.xxx
  17538 80.xxx.xxx.xxx
   5895 198.xxx.xxx.xxx
   3042 37.xxx.xxx.xxx
   2956 208.xxx.xxx.xxx
   2613 94.xxx.xxx.xxx
   2572 89.xxx.xxx.xxx
   2268 94.xxx.xxx.xxx
   1896 89.xxx.xxx.xxx
   1584 46.xxx.xxx.xxx
   1402 208.xxx.xxx.xxx
   1273 93.xxx.xxx.xxx
   1054 208.xxx.xxx.xxx
    860 162.xxx.xxx.xxx
    830 208.xxx.xxx.xxx
    606 162.xxx.xxx.xxx
    545 94.xxx.xxx.xxx
    480 37.xxx.xxx.xxx
    446 162.xxx.xxx.xxx
    398 162.xxx.xxx.xxx
84
linsort

Warum cat | awk verwenden? Sie müssen nur awk verwenden:

awk '{ print $1 }' /var/log/*access*log | sort -n | uniq -c | sort -nr | head -20
15
Benjamin Dupuis

Ich weiß nicht, warum ein einfacher sort -n nicht funktioniert hat, aber das Hinzufügen eines nicht numerischen Zeichens zwischen dem Zähler und der IP-Adresse hat mein Problem befallen.

cat access.* | awk '{ print $1 } ' | sort | uniq -c | sed -r 's/^[ \t]*([0-9]+) (.*)$/\1 --- \2/' | sort -rn
4
Arthur

Das sollte funktionieren

cat access.* | awk '{ print $1 }' | sort | awk '{print $1 " " $2;}' | sort -n

Ich sehe kein Problem.

Steuerzeichen in den Dateien?

Dateisystem voll (temporäre Dateien)?

2
tue

Wenn die Sortierung nicht wie erwartet erfolgt, liegt dies wahrscheinlich an einem Gebietsschema-Problem.

| LC_ALL=C sort -rn

awk '{array[$1]++}END{ for (ip in array) print array[ip] " " ip}' <path/to/Apache/*.log> | LC_ALL=C sort -rn

Quellen Sortierung nicht wie erwartet sortiert (Leerzeichen und Gebietsschema)

https://www.commandlinefu.com/commands/view/9744/sort-ip-by-count-quickly-with-awk-von-Apache-logs

0
Antony Gibbs