2013-09-08 7 views
29

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

Und aus welchem ​​Grund auch immer, der Sortierbereich 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. Ich habe auch versucht, Leerzeichen am Anfang der Zeile (sed 's/^[\t ]*//g') zu entfernen und sort -n -t" " -k1 zu verwenden, das nichts ändert.

Irgendwelche Hinweise?

Antwort

64

Dies kann zu spät sein, aber die numerischen in der ersten Art verwendet werden Sie das gewünschte Ergebnis,

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

Ausgang:

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 
+2

ich diese Frage völlig vergessen hatte, aber ich schaffte es, eine Lösung zu finden. Das hat nicht funktioniert (siehe in meiner Frage). Aber das Hinzufügen von nicht numerischen Zeichen zwischen der Nummer und der IP löste mein Problem. – Arthur

+0

Downvote: Diese Antwort ändert absolut nichts, die tatsächliche Antwort ist der Kommentar von Arthur – nicolallias

+0

Wie kann ich dies auf Apache ssl_request_log verwenden, da alle unsere Überschwemmung ist über ssl – Hayden

2

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

arbeiten Dies sollte ich kann nicht sehen, ein Problem.

Steuerzeichen in den Dateien?

Dateisystem voll (temporäre Dateien)?

4

Ich weiß nicht, warum einen einfachen sort -n didn Es funktioniert nicht, aber das Hinzufügen eines nicht numerischen Zeichens zwischen dem Zähler und der IP hat mein Problem gelöst.

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

Dies sollte als angenommene Antwort markiert werden – nicolallias

+0

Manchmal lohnt es sich, einige Status auszuschließen und bots 'cat access.log | grep -v -w 200 | grep -v -w 403 | grep -v -e '.jpg' | grep -v -i bot | awk '{print $ 1}' | sortieren -n | uniq -c | sed -r 's/^ [\ t] * ([0-9] +) (. *) $/\ 1 --- \ 2 /' | sortieren -nr | Kopf -200' – bato3

11

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 
Verwandte Themen