awk und shell: Variablenspielerei

12. Mai 2009
Das hier gezeigte kleine Shell-Skript, soll die Interaktion zwischen awk und der Shell bzw. dem -Skript demonstrieren. D.h., es wird eine Shell-Variable an den Aufruf von awk übergeben, dort bearbeitet und der neue Wert der Shell-Variablen wieder zugewiesen:
 
#!/bin/bash

z=0
for i in `seq 20`
do
    z=`tclsh8.5 dmtest.tcl | awk -v z=${z} '{ z+=$2; print z }'`
done
echo "duration = ${z} microsec."
 
Kurze Erklärung:
Es wird 20mal das Tcl-Skript 'dmtest.tcl' aufgerufen. Dieses Skript macht irgendwas und gibt dann z.B. den String "Zeit: 23811 Microsekunden" zurück. Den Zeitwert finden wir dann im awk-Skript in der Variablen $2 und addieren ihn zu der Shell-Variablen z. Danach geben wir den neuen Wert an die Shell-Skript-Varible zurück und verwenden diesen dann beim nächsten Schleifendurchlauf usw.

Ich weiß, die Zeitmessung hätte ich auch gleich vollständig im Tcl-Skript erledigen können, etwa derart:
 
puts "duration = [time { 
    for {set i 0} {$i < 20} {incr i 1} {
       ...
    }
}]"
 
Kommentare, Ideen oder Vorschläge willkommen!
HILFE
Code-Beispiele werden mit den BBCodes [code][/code] dargestellt. Jedes Tag muss eine Zeile für sich allein haben, d.h der Beispiel-Code muss wirklich ZWISCHEN den Tags stehen. Beispiel:
[code] ACHTUNG! HIER UMBRUCH WICHTIG. TAG [code] MUSS ALLEIN STEHEN
#include <stdio.h>

int main( void ){
    return 0;
} ACHTUNG! HIER UMBRUCH WICHTIG. NACHFOLGENDES TAG [/code] MUSS ALLEIN STEHEN
[/code]

Alles was zwischen den beiden Tags [register] und [/register] eingetragen wird, ist nur für registrierte (und eingeloggte) User sichtbar.
Dein Name *
Deine Email
Deine Website
Vorschau