Einführung, Tutorial und Referenz

Awk

Ausgabe bestimmter Zeilenbereiche einer Datei


Unser nächstes kleines Awk-Skript löst das Problem einen zusammenhängenden Zeilenbereich einer Datei auszudrucken, z.B. die Zeilen 9 bis 16 unserer Linux Definition-Beispieldatei.
{
zaehler += 1
if ( (zaehler >= 9 ) && (zaehler <= 16) ) {
print $0
}
}

Wenn man das obige Skript als Datei mit dem Namen print_line_area.awk abspeichert, kann man mit folgendem Aufruf die Aufgabenstellung lösen:
awk -f print_line_area.awk linux_definition.txt

und erhält die folgende Ausgabe:
Im Sprachgebrauch der Free Software Foundation wird die bekannteste,
unixoide Betriebssystemvariante als GNU/Linux bezeichnet, das aus dem
Linux-Kernel und Betriebssystem-Komponenten von GNU und Anderen
kombiniert ist. Weniger bekannte Betriebssysteme, die den Linux-Kernel
einsetzen sind z.B. das Dresden Real-Time Operating System Project
(DROPS) sowie Linux für Microcontroller (µCLinux). Beide sind jedoch
nicht, wie Linux, unixoid aufgebaut. Linux ist kein waschechtes Unix,
auch wenn das immer wieder fälschlicherweise behauptet wird.


Eine Sache ist natürlich an obigem Skript höchst unbefriedigend: Die Grenzen des Bereiches "9" und "16" stehen fest im Skript. Das folgende Awk-Skript verwendet die beiden Parameter a und b:
{
zaehler += 1
if ( (zaehler >= a ) && (zaehler <= b) ) {
print $0
}
}


Der Aufruf

awk -f print_line_area.awk -v a=9 b=16 linux_definition.txt

liefert wieder die gleiche Ausgabe, wie der erste Aufruf mit festen Werten.

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