Einführung, Tutorial und Referenz

Awk

Jede zweite Zeile, gerade Felder

In der Praxis kommt es häufig vor, dass man die geraden oder ungeraden Zeilen einer Datei ausgeben bzw. zur Weiterverarbeitung ansprechen will.

Dazu genügt ein erstaunlich kurzes Skript:

Für die Ausgabe der Zielennummern mit geradem Index (Achtung: Zählung beginnt bei 0):
 awk 'NR%2' Dateiname
Für die Ausgabe der Zielennummern mit ungeradem Index:
 awk '(NR+1)%2' Dateiname
Einem Anfänger mit AWK fällt wohl folgende auch funktionierende aber weniger elegante Lösung zuerst ein:
awk 'NR % 2 == 0 { print }' FILENAME
Wie sieht es aber aus, wenn man nur die geraden Feldelemente einer Zeile ausgeben will. Das folgende Skript löst dieses Problem. NF ist eine Systemvariable, die die Anzahl der Feldelemente enthält. Man beachte auch, dass die Zählung der Feldelemente mit 1 beginnt, also $1, $2, $3, ..:
{
  (NR+1)%2
  for (i=1; i<=NF; i++) {
    if (i%2) printf $i" ";
  }
  printf "\n"
}

© Copyright 2004 - 2008, Bodenseo, Linux-Kurse am Bodensee, Bernd Klein