Einige awk-Optionen

Option Beschreibung
-f filenameDas awk-Skript wird aus der Datei filename gelesen und nicht vom ersten
Kommandozeilenargument. Mehrere -f filename sind erlaubt.
-F fsfs wird als Feldtrennzeichen verwendet
-v var=wertEine Variable var wird mit dem Wert wert belegt
-W traditionalKompatibilitätsmodus, gawk verhält sich so wie Unix-awk
-W versionGibt 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

Feldtrennzeichen

Das 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

Mehrzeilige 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

Analog zum FS kann auch das Ausgabetrennzeichen OFS (output field separator) gesetzt werden. Detto ORS (output record separator).

This article is issued from Wikibooks. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.