Zum Inhalt springen

Awk: Übungen: Aktionen

Aus Wikibooks


Erläuterungen
Schwierigkeitsgrad der Übungen:
... sehr einfach ... ein bisschen schwieriger
Lösungen:

Die Links zu den Lösungen sind per Link-Bild realisiert. Im Gegensatz zu den üblichen Wikibooks-Gepflogenheiten gelangen Sie durch einen Klick auf das Symbol zur entsprechenden Lösungsseite.


Variablen und Operatoren

[Bearbeiten]

Benutzerdefinierte Variablen und Operatorenpriorität

[Bearbeiten]
Aufgabe
A10

Welche dieser Zeichenfolgen sind in awk-Skripten als Variablenbezeichner gültig?

  • ___
  • 1a
  • varX
  • var_y
  • _var
  • maß
  • _5n
  • ätsch
  • a-max


A20

Gegeben ist die Anweisung

 awk '
  BEGIN {
    x = 2
    y = 3
    z = 5 
 
    print x+(2*z)/x*2
    print x^y^2
    print (x^y)^2
    print x&&5
    print x||0
    print !x*5
  }'

Welche Resultate werden durch die print-Anweisungen ausgegeben?


A30

Gegeben ist die Anweisung

 awk '
  BEGIN {
    x = 2
    str = "e5"
 
    print str + x
 
    x = x ""
    print x+4
 
    print (x str) + 1
    print x "e3" + 1 
  }'

Welche Resultate werden durch die print-Anweisungen ausgegeben?


Feldvariablen

[Bearbeiten]
Aufgabe
A40

Gegeben sei die Datei bsp mit dem Inhalt

A    3     1
B    5     1 
A    x     0

Wie lauten die Resultate der Auswertung dieser Datei durch die folgenden Anweisungen?

  1. awk '$1=="A" {print $2++}' bsp
  2. awk '$1=="A" {print --$2}' bsp
  3. awk '$1=="A" {print !$2}' bsp
  4. awk '$1=="A" {print $1 && $2}' bsp
  5. awk '$1!="A" {print $2+$3}' bsp
  6. awk '$1!~/^A/ {print $(2+$3)}' bsp


Arrays

[Bearbeiten]
Aufgabe
A50

Gegeben ist die das awk-Skript

BEGIN {
  x["100"] = 25
  x["200"] = 30
  x["var"] = 49

  print "x[1] =     "   x[1]
  print "x[100] =   "   x[100]
  print "x[\"200\"] = " x["200"]
  print "x[var] =   "   x[var]
  print "x[\"var\"] = " x["var"]
 
  x[100] = 99
  print "x[\"100\"] = " x["100"]
} 

Daraus resultierende Ausgabe bei Ausführung dieses Skripts?


Builtin-Variablen

[Bearbeiten]

Gegeben sind die Dateien bsp

Mauretanien       :    2500000    :    500
Tonga             :    99000      :    2100
Korea, Republik   :    46100000   :    14500

und zusatz

Ukraine           :    53000000   :    1500
Marshallinseln    :    62000      :    1800     


Aufgabe
A60

Schreiben sie ein awk-Skript, das die Gesamtanzahl der Datensätze einer Datei, z.B. der Datei bsp, ausgibt.

A70

Gegeben ist die Anweisung awk '{print NF}' bsp. Was bedeutet NF in diesem Zusammenhang und welche Werte werden bei Ausführung der Anweisung ausgegeben?

A80

Gegeben ist die Datei test.awk

BEGIN {
  FS  = ":"
  OFS = "->"
} 
 
{
  print $1, $3
}

Wie sieht die Ausgabe bei Ausführung von awk -f test.awk bsp aus?

A90

Was für ein Ergebnis liefert die Anweisung awk -f test.awk bsp zusatz? Die Datei test.awk habe folgenden Inhalt:

BEGIN {
  FS = ":"
}
 
{
  print NR, FNR, $1
}


Kontrollstrukturen

[Bearbeiten]

Verzweigungen

[Bearbeiten]

Gegeben ist die Tabelle feststoffe

Feststoff  rho    cp
-------------------------
Al         2.70   0.92
Pb         11.34  0.13
Cr         7.19   0.51
Fe         7.87   0.47
Mg         1.74   1.03
Ti         4.54   0.47
Bi         9.80   0.13     


Aufgabe
A100
awk 'BEGIN { 
  rho=7.87
  OFS="\t"
}

$2 ~ /^[[:digit:]]/ {
  if($2+0 > rho)
    print $1, $2, " >"
  else
    print $1, $2, " <="  
}' feststoffe 

Diese Anweisung generiert aus der Datei feststoffe eine neue Tabelle. Wie sieht diese aus?

A102

Gegeben ist die Formel . Kreieren sie ein awk-Skript, das aus der bekannten Datei feststoffe eine Tabelle, in der nachfolgend skizzierten Art, erzeugt.

Feststoff   Q/(V * deltaT)    
-----------------------------------------
Xyz         0,98              <=  2.0
Abc         4,67              >   2.0


Schleifen

[Bearbeiten]
Aufgabe
A110

Gegeben ist die Formel . Generieren sie daraus mittels awk-Skript eine Tabelle ähnlich dieser

 x   |   y
 --------------
 0   |   0
 1   |   1
 2   |   4

Vorgaben:

  • Verwenden sie zu diesem Zweck
    1. die for-Schleife
    2. die while-Schleife
    3. die do-while-Schleife
A120

Gegeben ist ein Fragment eines awk-Skripts

BEGIN {
  feld[1] = "Argon"
  feld[2] = "Luft"
  feld[3] = "Sauerstoff"
  feld[6] = "Helium" 

  # ???????
}

Erweitern sie dieses Skript so,

  1. dass mit Hilfe einer for-Schleife und des in-Operators das Array feld ausgegeben wird
  2. löschen sie danach das Feldelement feld[6] und geben sie das Array erneut aus.


Funktionen

[Bearbeiten]
Aufgabe
A140

Schreiben sie ein awk-Skript, das die folgenden Funktionen tabellarisch abbildet

mit .

Genauigkeit/Ausgabeformat:

  • Funktionswert y: 2 Nachkommastellen
  • Argument x: 4 Nachkommastellen
A160

Gegeben sind zwei Tabellen, wie sie ähnlich auch in relationalen Datenbanken Verwendung finden.

Datei inhaber:

id   vorname  nachname  
----------------------
1    A.       Aaaa
2    B.       Bbbb
3    C.       Cccc
4    D.       Dddd
5    E.       Eeee
6    F.       Ffff

Datei konto:

id  kontonummer  inhaberid
--------------------------
1   08-123       1   
2   08-543       3
3   07-030       6
4   08-429       5
5   03-455       2
6   02-728       5
7   07-888       1
8   02-512       1
9   09-045       6 

Gesucht ist ein awk-Skript, das die relevanten Daten aus diesen beiden Tabellen in einer Tabelle kombiniert. Den Kontoinhabern sollen direkt ihre jeweiligen Kontonummern zugeordnet werden, etwa so

A. Aaaa
    Konto 1:  08-123
    Konto 2:  07-888
    Konto 3:  02-512
B. Bbbb
    Konto 1: 03-455
...

Geben Sie auch die komplette Anweisung an, die ein Benutzer in das Computersystem eintippen soll, damit das awk-Skript das gewünschte Resultat in die Datei kombiniert schreibt.