awk problem

Post Reply
Message
Author
arthur

awk problem

#1 Post by arthur »

möchte eine lange datei mit awk in einzelne dateien aufteilen.
fogender inhalt (beispielauszug)t:
! 003301$
# 3
0 4178.989
1 4178.989
1.1 4179.000
END
! 003304$
# 4
0 4178.989
1 4178.989
1.1 4179.000
END
END

! 003301$ => gibt die nummer unter der text gespeichert werden soll
END => ist das ende eines textblocks

die erste spalte (also 0, 1, 1.1 usw) gibt die zeitschritte
die zweite die zugehörigen werte

END
END => gibt das ende des letzen textblocks und der datei an.

wie kann ich die zeilenanzahl eines blockes bestimmen? bzw. wie bringe ich awk bei, dass er zwischen #3 und END usw. die daten in eine seperate datei schreiben soll?

gruß & dank
arthut

User avatar
heinrich
Posts: 219
Joined: 22. Sep 1999 11:22
Location: N49.137 E8.544

#2 Post by heinrich »

Du könntest hierfür eine Scriptsprache wie z.B. Perl verwenden. Aber auch mit AWK sollte dies möglich sein.
Eventuell benötigst du in AWK ein paar Prozeduren statt alles in einer einzigen grossen Schleife abzuarbeiten. Aber fileopen/-write/-close Funktionen von AWK wirst du auch benötigen.
Die Implementierung deiner Hausaufgaben überlasse ich dir. ;-)
It just works.

User avatar
jochen
prolinux-forum-admin
Posts: 699
Joined: 14. Jan 2000 15:37
Location: Jülich
Contact:

#3 Post by jochen »

Die Ausgabe in Dateien ist im awk schnell gemacht. Sowohl print als auch printf verstehen eine Ausgabeumlenkung à la Shell. Mal so als Grundgerüst:

Code: Select all

#!/usr/bin/awk -f
/^!/ {
    blockname = substr ($0,2,length($0-2))
    nest
}
{
      print > blockname
}
In der Variablen blockname wird der Name abgespeichert und bei allen anderen Zeilen werden diese in die Datei geschrieben, deren Name in der Variablen steht.

Ob Du nun den Namen etwas sorgfältiger herausfitzeln musst oder noch bestimmte Zeile ausfiltern musst, liegt an Dir.

Jochen
Die grösste Lüge der EDV? "Mal eben..."

Post Reply