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
awk problem
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.
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.
Die Ausgabe in Dateien ist im awk schnell gemacht. Sowohl print als auch printf verstehen eine Ausgabeumlenkung à la Shell. Mal so als Grundgerüst: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
Code: Select all
#!/usr/bin/awk -f
/^!/ {
blockname = substr ($0,2,length($0-2))
nest
}
{
print > blockname
}
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..."