Awk: Grundlagen: awk-Einstellungen

Aus Wikibooks


Einige awk-Optionen[Bearbeiten]

Option 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[Bearbeiten]

Feldtrennzeichen[Bearbeiten]

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[Bearbeiten]

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[Bearbeiten]

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