Awk Einzeiler

Mittwoch, 11. August 2021

Anmerkungen zu den nachfolgenden Beispielen

In den Beispielen wird der ':' als Feldtrnner benutzt (wie in /etc/passwd).
Für beliebige reguläre Ausdrücke steht in den Beispielen 'regexp'.


Felder einer Datei ausgeben

awk  -F":" '{print $1, $6}' sample.txt


Feld nur augeben, wenn nicht leer

awk  -F":" '{if ($2)print $2}' sample.txt


Felder ausgeben und mit Zeichen '-' trennen

awk -F: '{print $1 "-" $4 "-" $6}' sample.txt


Letztes Feld ausgeben

awk -F: '{print $NF}' sample.txt


Zeilen ohne 2. Feld ausgeben

awk '{$2 = ""; print}' sample.txt


Feld ausgeben, welches nach einem Feld mit einem bestimmten Wert folgt, hier 'src'

ip route get 1.1.1.1 | awk '{for(i=1;i<=NF;i++){if($i=="src") print $(i+1)}}'


String ans Ende der Zeilen anfügen, für die 'regexp' zutrifft

awk '/regexp/{print $0; print "am Ende angehängt";next}{print}' sample.txt


If.. then.. else then.. in awk

awk '/regexp/{A-here;next}{B-here}' sample.txt
Beispiel:
awk '/regexp/{gsub(/string/,"replacement");print $1;next}{print;}' sample.txt


If.. then.. elseif then.. in awk

awk '/regexpA/{A-do-here;}/regexpB/{B-do-here}' sample.txt
Beispiel:
awk '/house/{print $1;}/cat/{print;}' sample.txt


Awk statt wc -l (count lines)

awk 'END{print NR}'


Awk statt grep regexp (matching lines)

awk '/regexp/'


Awk statt egrep -v regexp (non matching lines)

awk '!/regexp/'


Awk statt egrep -n regexp (matching lines with numbers)

awk '/regexp/{print FNR,$0}'


Awk statt egrep -i regexp (matching lines and ignore case)

awk 'BEGIN {IGNORECASE=1};/regexp/'


Awk statt cat -n (Zeilen durchnummerieren)

awk '{print FNR "\t" $0}'


Awk statt uniq (remove duplicates)

awk 'a !~ $0{print}; {a=$0}'


Awk statt head -5 (print first 5 lines)

awk 'NR < 6'


Leerzeilen unterdrücken

awk '/^[ \t]*$/{next}{print}' sample.txt


Durchnummerieren und dabei Leerzeilen unterdrücken

awk '/^..*$/{ print FNR ":" $0 ;next}{print}' sample.txt


Ersetze foo mit bar (on lines matching regexp)

awk '/regexp/{gsub(/foo/, "bar")};{print}' sample.txt


Leerzeichen am Zeilenende entfernen

 awk '{sub(/[ \t]*$/, "");print}' sample.txt


Leerzeichen am Zeilenanfang entfernen

awk '{sub(/^[ \t]+/, ""); print}' sample.txt


Text am Zeilenanfang einfügen

awk '/regexp/{sub(/^/, "Eingefügt"); print;next;}{print}' sample.txt


Awk als Taschenrechner (ergibt 5,1)

awk 'BEGIN{print 3.1+4/2}'


Dezimalzahlen hexadezimal ausgeben (prints 0x20)

awk 'BEGIN{printf "0x%x\n", 32}'


Hexadezimal als Dezimalzahl ausgeben (prints 32)

awk 'BEGIN{print strtonum(0x20)}'

Anmelden