Hallo, Am Sun, 27 Feb 2005, Christian Boltz schrieb:
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
*g*
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 ;-)
Hier geben sich die beiden nix. Beide liefern bei mir um die 0.05s Laufzeit (bei ~1800 URLS).
for domain in $DOMAINS ; do
Solche Konstruktionen sind oft schlecht. Man sollte sich sehr genau ueberlegen, ob man eine ganze Datei (samt Sonderzeichen) in eine Variable packt. Ausserdem ist $2 ja leer. Besser ist in der Regel: gawk -F '/' '{print $1"//"$3;}' testlinks.txt | sort -u | \ while read domain; do ... done [..]
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.
Jep. Perl aber erst wenn man wirklich eher viel verwurstet. -dnh -- Studie: Oberweite deutscher Frauen wird immer größer. Ich hab's immer gewusst: Der liebe Gott hat sich was dabei gedacht, als er mir so große Hände gab! (Harald Schmidt)