Linux-Konsohlenbefehl: Welcher Ausdruck kommt am häufigsten vor?

shortrange

Banned
Registriert
Okt. 2013
Beiträge
626
Hallo,

es geht um ein Textdokument, in dem neben sehr viel normalem Text auch viele URLs enthalten sind. Dieser Text soll durchsucht und ausgewertet werden. Es handelt sich um die normale Konsole (bash) auf einem Linuxsystem.

Ich brauche eine Liste der am häufigsten vorkommenden URLs in absteigender Reihenfolge. Also die am häufigsten vorkommende URL ganz oben, darunter die am zweithäufigsten vorkommende, usw. Am besten auch mit der Anzahl, wie oft die jeweilige URL enthalten ist.

Als ersten Befehl verwende ich grep, um die URLs aus dem Text herauszufiltern:
Code:
[hH][tT][tT][pP][sS]?\:\/\/[w]*[\.]?[A-Za-z1-9]+\.[A-Za-z]+
Dieser reguläre Audruck (regex, regular expression) erkennt URLs in allen mir bekannten Formen, ob nun mit http oder https, mit www oder ohne, in Groß- oder Kleinschreibung und/oder mit Nummern sowie für beliebige Top-Level-Domains.
Habt ihr hier noch Verbesserungsvorschläge?

Als zweiten Befehl brauche ich nun noch eine Funktion, die die Ausgabe vom ersten Befehl analysiert und die am häufigsten vorkommenden URLs zählt und auflistet. Welchen Befehl verwendet man dafür?

Wisst ihr, wie man das lösen kann? Vielen Dank!
 
awk '{print $1}' | sort | uniq -c | sort -rn
Ergänzung ()

oder awk '{ a[$1]++ } END { for (i in a) print i, a }'
 
Zuletzt bearbeitet:
shortrange schrieb:
Wisst ihr, wie man das lösen kann? Vielen Dank!

Erster Versuch:

Code:
perl -00 -ne 'map $x{$_}++, m{https?://([^\s\>]+)}gsi; print join"\n", map"$x{$_} $_", sort{$x{$b}<=>$x{$a}} keys %x' file.html

Liefert die Links sortiert nach absteigender Anzahl mit Anzahl vorne.
 
Danke für Eure Antworten!

Ich verwende nun diesen Befehl:
Code:
egrep -o [hH][tT][tT][pP][sS]?\:\/\/[w]*[\.]?[A-Za-z1-9\-]+\.[A-Za-z1-9\-]*[\.]*[A-Za-z1-9\-]*[\.]*[A-Za-z1-9\-]*[\.]*[A-Za-z1-9\-]* DATEI.xml | awk '{print $1}' | sort | uniq -c | sort -rn

Nicht sonderlich elegant, funktioniert aber.
 
Zurück
Oben