PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : awk: nächste Zeile lesen



vbd
27-03-2007, 15:27
Hi,

habe bisher mit awk keine richtige Erfahrung. Möchte mit awk
folgendes machen:

- in einer Datei nach start_pattern suchen
- wenn das Muster gefunden wurde aus der nächsten Zeile die ersten 8
Zeichen ermitteln
- diese Zeichenkette allen nachfolgenden Zeilen voranstellen
- bis in der Zeile end_pattern gefunden wird
- dieses Vorgehen kann in einer Datei ca. 4000 mal vorkommen
- das Ergebnis soll in eine neue Datei geschrieben werden (will ich
mittels Umleitung machen gawk -fscript.awk ausgangsbasis.txt >
ergebnis.txt)


bisher habe ich folgendes zusammengestöpselt:


BEGIN{
start_pattern = "Material-Nummer"
end_pattern = "Summe von"
}


$1==start_pattern {

# nächste Zeile
substr ($1,1,8)

#.... hier fehlt noch einiges
}


Problem wie ermittle ich die ersten 8 Zeichen der nächsten Zeile
wenn in der aktuellen Zeile start_pattern gefunden wurde?

Gibt es für solche Fälle Codebeispiele etc. bzw. wo finde ich eine
vernünftige Anleitung zu awk.

Tipps, Hinweise etc. werden dankbar aufgenommen :)

vbd
28-03-2007, 14:07
falls es jemanden interessiert, hier meine Lösung



BEGIN {
start_pattern = "Material-Nummer"
end_pattern = "Summe von"
}

# Wenn in der aktuellen Zeile das Muster start_pattern gefunden wurde
# ermittle die ersten 8 Zeichen aus der nächsten Zeile
$1==start_pattern {
getline
pre=substr($1,1,8)
}

# Stelle allen nachfolgenden Zeilen die ersten 8 Zeichen voran, solange
# bis in der Zeile end_pattern gefunden wurde
{
do{
print pre" "$0
}while ($1==end_pattern)
}


Für Hinweise was man daran verbessern könnte bin ich ebenfalls dankbar.