Re: kleines awk-Problem
Hallo,
Am Mit, 02 Jun 2010, D. Schreiber schrieb:
>ich habe eine Datei mit folgendem Aufbau:
>
>Feld1: Wert1
>Feld2: Wert2
>Feld3: Wert3
> --> Text1
> --> Text2
> --> Text3
>
>Feld1: Wert1
>Feld2: Wert2
>Feld3: Wert3
> --> Text1
> --> Text2
>
>Feldx: Wertx
>...
>
>Die Anzahl der Zeilen mit --> Text kann variieren.
>Ich möchte die Werte in eine Tabelle übertragen, jedes Feld in eine
>Spalte, alle Zeilen mit --> zusammen in eine Spalte. Das Ergebnis
>würde dann so aussehen:
>
>"Wert1";"Wert2";"Wert3";"Text1 Text2 Text3"
>"Wert1";"Wert2";"Wert3";"Text1 Text2"
>
>Die Werte aus den Zeilen Feldx zu übertragen war kein Problem. Aber an
>den anderen bin ich bisher gescheitert. Mir fehlt der zündende
>Gedanke, um mittels (g)awk alle Zeilen mit "-->" bis zur nächsten
>Leerzeile in einen String zu packen.
>Hat vllt. jemand einen Tipp? Der Zeilenumbruch kann auch beibehalten werden.
==== foo.awk ====
#!/usr/bin/gawk -f
BEGIN { FS=":"; }
function printbuf() {
for(v in buf) {
printf("\"%s\";", buf[v]);
};
printf "\n";
}
$1 ~ /^Feld/ {
sub(/^[[:space:]]*/, "", $2);
buf[n] = $2;
n++;
}
$1 ~ /-->/ {
sub(/[[:space:]]*-->[[:space:]]*/, "", $1);
buf[n] = buf[n]" "$1;
}
/^\s*$/ {
sub(/^[[:space:]]*/, "", buf[n]);
printbuf();
n=0;
delete buf;
}
END { printbuf(); }
====
Aufruf: 'gawk -f foo.awk foo.dat' oder ausführbar machen und 'foo.awk
foo.dat' aufrufen, wobei die Eingabe in foo.dat liegt. Oder weglassen
und per stdin füttern.
HTH,
-dnh
--
Bei den meisten Männern reicht es nicht zum Begreifen, nur zum
Begrabbeln. -- Gabriele Conrad
Reply to: