Notice: Undefined index: string in /var/www/stefan/howtux.de/htdocs/article.php on line 49

Notice: Undefined index: settings in /var/www/stefan/howtux.de/htdocs/article.php on line 61
Home / awk / Variablen und Arrays in awk

Variablen und Arrays in awk

Kategorie: awkErstellt: 02.10.2007 - 23:58 
Autor: Stefan Abu Salah
0

Variablen und Arrays in awk

Damit in awk sinnvolle und komplexere Aufgaben erledingt werden können bedarf es einer Möglichkeit Werte zu speichern und zu verändern. Variablen bieten unter awk, ähnlich wie in Shellskripten, genau diese Möglichkeit. Der Name einer Variablen sollte unter awk immer nur aus Buchstaben, Zahlen und Unterstrichen bestehen, wobei das erste Zeichen niemals eine Zahl sein darf. Mit den Built-In Funktionen print und printf lassen sich die Inhalte der Variablen auf ausgeben.

Beispiel: Gültige und ungültige Variablennamen unter awk
Gültige:
_Variable1
Variable_1
_1Variable
...
Ungültige:
1Variable
%Variable
...

Variablennamen dürfen keine Namen von awk-Built-In Funktionen haben (z.B. printf, print,...).

Man weist einer Variablen mit dem Gleichheitszeichen (=) einen Wert zu, dies darf sowohl eine Zahl, ein String oder eine Mischung aus beidem sein. Je nachdem ob auschließlich Zahlen oder eine Mischung aus Zahlen und Strings in ihr gespeichert werden interpretiert awk die Variable als String oder Zahl. Mit den Built-In Funktionen print und printf lassen sich die Inhalte der Variablen auf ausgeben.

Beispiel: Variablen in awk
...
{
# Wir deklarieren eine Variable "summe" und weisen ihr den Wert 123 zu
summe=123;
print summe;

# Nun weisen wir "summe" den Wert 1234 zu und geben diesen aus
summe=1234;
print summe;
}
...

Anders als in Shellskripten greift man auf Variablen in awk ohne vorangestelltes Dollarzeichen ($) zu.

Arrays in awk
Neben den normalen Variablen gibt es unter awk zusätzlich Arrays. Arrays werden in awk definiert indem man an einen Variablennamen eckige Klammern anfügt. Innerhalb dieser Klammern muss man den Arraybezeichner angeben. Im Normalfall ist dies einfach eine Zahl. Über diese Zahl kann zu einem späteren Zeitpunkt wieder auf den Inhalt zugegriffen werden. Arrays verhalten sich exakt so wie normale Variablen. Man kan in ihnen Werte speichern, sie verändern und auslesen.

Beispiel: Arrays in awk
...
{
# Wir deklarieren ein Array "namen"
namen[1]="Hans";
namen[2]="Heinrich";
namen[3]="Berti";
namen[4]="Martin";

# Und nun geben wir einige Namen wieder aus:
print "Der erste heißt" namen[1];
print "Der zweite heißt" namen[2];
}
...

Assoziative Arrays in awk
awk bietet eine weitere Möglichkeit mit Arrays zu arbeiten; die assoziativen Arrays. Assoziative Arrays unterscheiden sich von normalen Arrays in ihren Bezeichnern. Bezeichner können hier auch Wörter sein. Wichtig ist zu beachten, dass die Bezeichner hier in Hochkommatas (") gesetzt werden müssen. Ansonsten erfolgt der Zugriff auf diese Arrays analog zu den normalen Arrays. Ein Vorteil dieser assoziativen Arrays ist die bessere Übersicht im Quellcode.

Assoziative Arrays in awk
...
{
# Wir deklarieren ein assoziatives Array "user"
user["name"]="Müller";
user["vorname"]="Heinrich";
user["ort"]="Köln";
user["plz"]="50679";

# Und nun geben wir den Inhalt wieder aus:
print "Der Benutzer heißt: " user["vorname"] " " user["name"];
print "Wohnhaft in: " user["plz"] ", " user["ort"];
}
...

# Folgende Ausgabe hätte dieses Skript zur Folge:
Der Benutzer heißt: Heinrich Müller
Wohnhaft in: 50679 Köln

Mehrdimensionale assoziative Arrays in awk
Mehrdimensionale assoziative Arrays können dazu beitragen den Programmcode einfacher lesbar zu machen. Sie bieten die Möglichkeit Gruppen von Variablen zu definieren und auf diesen Gruppen zu arbeiten. Natürlich kann man mit mehrdimensionalen assoziativen Arrays ansonsten genauso verfahren wie mit normalen Arrays oder Variablen.

Mehrdimensionale assoziative Arrays in awk
...
{
settings["network", "IP"] = "139.6.17.77";
settings["network", "Port"] = "1234";
settings["network", "Hostname"] = "troubadix";
settings["apache", "Port"] = "80";
settings["apache", "Path"] = "/var/www";

print settings["network", "IP"];
print settings["network", "Port"];
print settings["network", "Hostname"];

path=settings["apache", "Path"];
port=settings["apache", "Port"];
}

Arrays löschen
Mit der Anweisung delete kann man jederzeit Arrayelemente löschen, wenn man diese nicht mehr braucht.

Arrays löschen
...
{
# Wir deklarieren ein assoziatives Array "user"
user["name"]="Müller";
user["vorname"]="Heinrich";
# Und nun geben wir den Inhalt wieder aus:
print "Der Benutzer heißt: " user["vorname"] " " user["name"];
# Der Benutzer heißt: Heinrich Müller

delete user["vorname"];
print "Der Benutzer heißt: " user["vorname"] " " user["name"];
# Der Benutzer heißt: Müller
}



Notice: Undefined variable: urli in /var/www/stefan/howtux.de/htdocs/classes.php on line 240
Bookmark auf del.icio.usBookmark auf Mister WongBookmark auf BlinklistBookmark auf GoogleBookmark auf LinkarenaBookmark auf YiggBookmark auf FolkdBookmark auf Yahoo
Home / awk / Variablen und Arrays in awk
simplum