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)}'