Kombination von AWK, SED und Shellprogrammierung

Anwendungen

Simulation des Awk durch ein Tcl-Script


Bei dem folgenden Programm handelt es sich um einen Exoten, der eigentlich nicht so ganz in den Rahmen dieser Webseite passt. Vor allem deshalb, weil dieses Skript in Tcl geschrieben ist. Allerdings ist es insofern interessant, weil es das Verhalten von AWK in Tcl simuliert:

#!//usr/bin/tclsh

if { $argc < 1 } {
    set file_name "stdin"
} else {
    set file_name [lindex $argv 0]
}

if { $file_name != "stdin" } {
    if {[ catch { open $file_name r } file ] } {
    puts stderr "Cannot open $file: $file"
    }
} else {
    set file stdin
}
while { [ gets $file line ] >= 0 } {
    # was hier innerhalb dieser Schleife steht, entspricht dem Haupteil eines Awk-Skriptes
    # also all das, was jeweils mit einer Zeile gemacht wird.
    #puts $line
}

Einsichtiger ist vielleicht das nächste Skript, das auch die Simulation des Awk zum Ziel hat.

Jedes Awk-Skript besteht aus drei Hauptteilen:
  • BEGIN
    Hier finden sich die Anweisungen, die vor der Abarbeitung der Hauptschleife des Awk abearbeitet werden.
  • Hauptschleife (Zeilenbearbeitung)
    Anweisungsfolge, die die Bearbeitung der Zeilen definiert.
  • END
    Anweisungsfolge, die nach Abarbeitung aller Zeilen bearbeitet wird.

# imitating the behaviour of the awk

proc for_file { filename init_script line_script end_script } {
    if { $filename != "stdin" } {
    if {[ catch { open $filename r } file ] } {
        puts stderr "Cannot open $file: $file"
    }
    } else {
    set file stdin
    }
    eval $init_script
    while { [ gets $file line ] >= 0 } {
    eval $line_script
    }
    eval $end_script



© Copyright 2004 - 2008, Bodenseo, Linux-Kurse am Bodensee, Bernd Klein