awk

awk print last columns

Written by  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  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  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&quot;|&quot; -f1 test.lst | awk -F &#39;&#39; &#39;{ print $NF }&#39;
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