awk
awk print last columns
Written by georg on März 29, 2018
Aus einer Liste die letzten beiden Spalten aussgeben. Der Input ist getrennt mit „.“, also zum Beispiel Domainnamen und man will nur mehr Top Level und Second Level haben, nicht aber die ganzen Sub Levels.
$LISTE und $OUTPUT sind Dateinamen.
awk -F"." '{print $(NF-1)"."$NF}' < $LISTE| sort | uniq > $OUTPUT
Speed Up Search & Replace in Shellscripts
Written by georg on Oktober 3, 2014
Als erstes erzeugen wir ein paar Testdaten:
for i in {0..100000..1}; do echo "y $i $RANDOM "; done > testfile
Die Testdaten sehen jetzt etwa so aus (ca. 15MB):
head testfile y 0 8229 y 1 32515 y 2 13193 y 3 31231 y 4 27663 y 5 24114 y 6 20325 y 7 5351 y 8 1576 y 9 21936
Wir ersetzen alle y durch x mit awk:
# time awk '{ print "x "$2" "$3 }' < testfile > /dev/null real 0m5.942s user 0m5.672s sys 0m0.088s
und jetzt mit sed
# time sed s/"y"/"x"/g testfile > /dev/null real 0m4.870s user 0m4.644s sys 0m0.072s
Wir schränken die suche ein – nach dem ersten Treffer darf abgebrochen werden
# time sed s/"y"/"x"/ testfile > /dev/null real 0m3.560s user 0m3.380s sys 0m0.084s
Wir suchen gezielt nach Zeilenanfang
# time sed s/"^y"/"x"/ testfile > /dev/null real 0m3.604s user 0m3.416s sys 0m0.104s
Und ersetzen auch Zeilenanfang
# time sed s/"^y"/"^x"/ testfile > /dev/null real 0m3.575s user 0m3.428s sys 0m0.064s
Fazit: Wenn man das richtige Werkzeug zur richtigen Zeit benutzt lassen sich recht einfach 40% einsparen! AWK schneidet hier deutlich langsamer ab, weil erst die Parameter geparsed werden müssen!
Dateinamen aus einer Liste extrahieren
Written by georg on Februar 7, 2012
Hier die Liste:
# cat test.lst X:KRIS KRISTOFFERSONKRIS KRISTOFFERSON - HELP ME MAKE IT THROUGH THE NI - SINGLE - 1980 - COUNTRY - 0.MP3|TAG|KRIS KRISTOFFERSON|HELP ME MAKE IT THROUGH THE NI||SINGLE|1980|0|COUNTRY|MP3|0|141296|0|327680|0|0|-1|0|0|0|3|192|10|-1|0|0|0|-1472508263|0||0|-1|-1| X:ENGLISCHCCARLENE CARTERCARLENE CARTER - EVERY LITTLE THING - SINGLE - 1980 - DANCE - 0.MP3|TAG|CARLENE CARTER|EVERY LITTLE THING||SINGLE|1980|0|DANCE|MP3|0|192992|0|327680|0|0|-1|0|0|0|3|128|10|-1|0|0|0|804889938|0||0|-1|-1| X:TOM ASTOR UND WOLFGANG PETRY - TAKE ME HOME - FOX.MP3|TAG|TOM ASTOR UND WOLFGANG PETRY|TAKE ME HOME|FOX||2006|||MP3|0|177972|0|327680|0|0|-1|0|0|0|3|192|10|-1|0|0|0|-1510661211|18||43283610|-1|-1| X:TEXAS COUNTRYTEXAS COUNTRY - HEARTACHE COUNTY.MP3|TAG|TEXAS|COUNTRY||- HEARTACHE COUNTY|1999|TRACK|COUNTRY|MP3|0|178364|0|327680|0|0|-1|0|0|0|3|128|10|-1|0|0|0|-742867055|0||0|-1|-1|
Aufgabe: Extrahiere den Dateinamen:
# cut -d"|" -f1 test.lst | awk -F '' '{ print $NF }' KRIS KRISTOFFERSON - HELP ME MAKE IT THROUGH THE NI - SINGLE - 1980 - COUNTRY - 0.MP3 CARLENE CARTER - EVERY LITTLE THING - SINGLE - 1980 - DANCE - 0.MP3 TOM ASTOR UND WOLFGANG PETRY - TAKE ME HOME - FOX.MP3 TEXAS COUNTRY - HEARTACHE COUNTY.MP3