Awk: Grundlagen: awk-Einstellungen
Einige awk-Optionen
BearbeitenOption | Beschreibung |
---|---|
-f filename | Das awk-Skript wird aus der Datei filename gelesen und nicht vom ersten Kommandozeilenargument. Mehrere -f filename sind erlaubt. |
-F fs | fs wird als Feldtrennzeichen verwendet |
-v var=wert | Eine Variable var wird mit dem Wert wert belegt |
-W traditional | Kompatibilitätsmodus, gawk verhält sich so wie Unix-awk |
-W version | Gibt die aktuell verwendete awk-Version aus |
Beispiel:
awk -W version
Ausgabe:
GNU Awk 3.1.3 Copyright (C) 1989, 1991-2003 Free Software Foundation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. ...
Beispiel: Gegeben sei eine Datei cvs.csv folgenden Inhalts
1,345,33 2,897,222 3,8,765 4,2,65 5,43,177
In der erste Spalte stehen die Identifikationsnummern, die zweite und dritte Spalte sollen Umsatzzahlen repräsentieren. Sie wollen für jeden Datensatz die Summe der Umsätze bilden und neben der Identifikationsnummer ausgeben.
awk-Skript:
{print $1 ": " $2+$3}
Aufruf:
awk -F "," -f test.awk cvs.csv
Ausgabe:
1: 378 2: 1119 3: 773 4: 67 5: 220
Einstellungen in einem awk-Skript
BearbeitenFeldtrennzeichen
BearbeitenDas Feldtrennzeichen FS (field separator) kann nicht nur über die awk-Optionen geändert werden, sondern wesentlich eleganter auch direkt im awk-Skript.
Beispiel: Die cvs.cvs-Eingabedatei soll in der unter awk-Optionen beschriebenen Weise abgehandelt werden, allerdings soll das Feldtrennzeichen direkt im Skript selbst umgesetzt werden.
awk-Skript:
#/usr/bin/awk -f BEGIN {FS=","} {print $1 ": " $2+$3}
Mehrzeilige Datensätze
BearbeitenMehrzeilige Datensätze sind durch geeignetes Setzen des Datensatztrennzeichens RS (record separator) einlesbar.
Beispiel: Gegeben ist eine Datei kino.txt folgenden Inhalts
KinoA Film1 Film2 Film3 - KinoB Film1 Film4 Film5 - KinoC Film1 Film3 Film4
Die Ausgabe soll in der Form KinoX: FilmL, FilmM, FilmN erfolgen.
awk-Skript:
#!/usr/bin/awk -f BEGIN {RS="-"} {print $1 ": " $2 ", " $3 ", " $4}
Ausgabe:
KinoA: Film1, Film2, Film3 KinoB: Film1, Film4, Film5 KinoC: Film1, Film3, Film4
OFS, ORS
BearbeitenAnalog zum FS kann auch das Ausgabetrennzeichen OFS (output field separator) gesetzt werden. Detto ORS (output record separator).