Hallo Al, hallo Leute, Am Freitag, 25. Februar 2005 16:56 schrieb Al Bogner:
Gegeben ist eine Text-Datei mit Links, nun soll die in die Bereiche Bilder und "andere" Links gegliedert und sortiert werden und die Domain alleine gelistet werden. (Beispiel siehe unten)
Mir fallen nur einige komplizierte Lösungen ein, aber ihr könnt das sicher kürzer.
Stimmt. Ich rationalisiere gleich mal die vielen Katzen weg (die sollen lieber Mäuse fangen ;-) und verleihe Dir einen dicken useless use of cat award
cat testlinks.txt | sort -u
http://stuff.mit.edu/afs/sipb/project/linux/gif/linux95.blue.gif http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.10 http://www.novell.com/de-de/linux/suse/ http://www.novell.com/de-de/products/desktop/ http://www.novell.com/img/n_nld-buy.jpg
# Enthaltene Domains: cat testlinks.txt | gawk -F '/' '{print $1"//"$2$3}' | sort -u
DOMAINS="`gawk -F '/' '{print $1"//"$2$3}' < testlinks.txt | sort -u`" # alternativ statt gawk: sed 's§^\([^/]*//[^/]*\).*$§\1§' # (sed ist möglicherweise etwas schneller ;-) for domain in $DOMAINS ; do # Falls es Leerzeichen-sicher sein soll, besser # echo "$DOMAINS" | while read domain ; do # verwenden - aber bei Domains sind ja Leerzeichen glücklicherweise # nicht erlaubt ;-) echo "$domain"
#Bilddateien cat testlinks.txt | egrep "\.jpg|\.gif"
egrep "$domain/.*\.(jpg|gif)$" testlinks.txt # man beachte die Verankerung am Zeilenende mit $
# Keine Bilder cat testlinks.txt | egrep -v "\.jpg|\.gif"
egrep "$domain/" testlinks.txt | egrep -v "\.jpg$|\.gif$" # wiederum um $ fürs Zeilenende ergänzt
Ergebnis sollte sein:
done So, wenn Du das von mir geschriebene in ein Shellscript packst, müsste es wie gewünscht funktionieren. Falls Du das Script des öfteren brauchst oder sehr viele Domains in Deiner Liste vorkommen, ist eine Lösung mit awk oder Perl schneller, bei der die URLs erstmal in ein paar Arrays verteilt werden, damit die Liste nicht x-fach gelesen werden muss. Eine weitere Alternative wäre, jeder Zeile (automatisiert) ein Sortierkriterium voranzustellen, bestehend aus Domainname und Ranking. Also etwas in dieser Art: http://www.irgendwas.de a http://www.irgendwas.de/ (Domain) http://www.irgendwas.de b http://www.irgendwas.de/test.htm (nicht-Bilder) http://www.irgendwas.de c http://www.irgendwas.de/x.gif (Bilder) Diese Liste kannst Du dann bequem mit sort bearbeiten und die ersten beiden Spalten anschließend wieder wegkürzen. (Um die ersten beiden Spalten erstmal reinzubekommen, empfiehlt sich sed in Verbindung mit dem Bereichsoperator. Falls Du das wirklich willst, frag ggf. nochmal nach.) Gruß Christian Boltz -- Nicht das ich frei von Paranoia Schueben waere ;), aber wenn Dir das passiert spiel sofort Lotto, bei dem Glueck bekommst Du bestimmt 4 Wochen den 6er mit Superzahl. [Maik Holtkamp in suse-linux]