Awk - Druckt den nächsten Datensatz nach dem übereinstimmenden Datensatz
Ich versuche mit awk ein nächstes Feld zu bekommen, nachdem ich es gefunden habe.
Gibt es eine Option, um dies zu tun, oder muss ich den Datensatz in ein Array einscannen, dann jedes Feld in einem Array markieren und das darauf folgende drucken?
Was ich bisher habe:
Das Dateiformat ist:
<FIELD><separator "1"><VALUE><separator "1"><FIELD><separator "1"><VALUE>
... und so weiter,field|value
Paare werden wiederholt, mindestens ein Paar in einer Zeile oder mehrere Paare <10 pro Zeile
dat.txt:
FIELDA01VALUEA01FIELDA21VALUEA21FIELDA31VALUEA3
FIELDB01VALUEB01FIELDB21VALUEB21FIELDB31VALUEB3
FIELDC01VALUEC01FIELDC21VALUEC21FIELDC31VALUEC3
FIELDD01VALUED01FIELDD21VALUED21FIELDD31VALUED3
FIELDE01VALUEE01FIELDE21VALUEE21FIELDE31VALUEE3
Mit einem einfachen awk-Skript, das das zweite Feld in einer Zeile ausgibt, die mit FIELDB2 übereinstimmt:
#!/bin/awk -f
BEGIN { FS = "1" }
/FIELDB2/ { print $2 }
Ausführen des oben genannten:
> ./scrpt.awk dat.txt
Gibt mir:
VALUEB0
Dies liegt daran, dass die Zeile, die übereinstimmt:
FIELDB01VALUEB01FIELDB21VALUEB21FIELDB31VALUEB3
Wenn aufgeteilt in Datensätze aussieht:
FIELDB0 VALUEB0 FIELDB2 VALUEB2 FIELDB3 VALUEB3
Von dem das zweite Feld istVALUEB0
Jetzt weiß ich nicht wasFIELDXX
wird übereinstimmen, aber ich möchte den nächsten Datensatz in der Zeile danach druckenFIELDXX
das stimmte überein, in diesem speziellen Beispiel wennFIELDB2
Streichhölzer muss ich ausdruckenVALUEB2
.
Irgendwelche Vorschläge?