Я пытаюсь получить следующее поле после сопоставления поля с помощью awk.
Есть ли возможность сделать это или мне нужно отсканировать запись в массив, затем проверить каждое поле в массиве и распечатать одно после этого?
Что у меня так далеко:
Формат файла:
<FIELD><separator "1"><VALUE><separator "1"><FIELD><separator "1"><VALUE>
... и так далее, пары field|value
повторяются, будет по крайней мере одна пара в строке или несколько пар <10 на строку </p>
dat.txt:
FIELDA01VALUEA01FIELDA21VALUEA21FIELDA31VALUEA3
FIELDB01VALUEB01FIELDB21VALUEB21FIELDB31VALUEB3
FIELDC01VALUEC01FIELDC21VALUEC21FIELDC31VALUEC3
FIELDD01VALUED01FIELDD21VALUED21FIELDD31VALUED3
FIELDE01VALUEE01FIELDE21VALUEE21FIELDE31VALUEE3
С помощью простого скрипта awk, который печатает второе поле в строке, соответствующей FIELDB2:
#!/bin/awk -f
BEGIN { FS = "1" }
/FIELDB2/ { print $2 }
Запуск вышеуказанного:
> ./scrpt.awk dat.txt
дает мне:
VALUEB0
Это потому, что совпадающая строка:
FIELDB01VALUEB01FIELDB21VALUEB21FIELDB31VALUEB3
При разбиении на записи выглядит:
FIELDB0 VALUEB0 FIELDB2 VALUEB2 FIELDB3 VALUEB3
Из которого второе поле VALUEB0
Теперь я не знаю, какой FIELDXX
будет соответствовать, но я хотел бы напечатать следующую запись в строке после совпадения FIELDXX
, в этом конкретном примере, когда FIELDB2
соответствует, мне нужно напечатать VALUEB2
.
Есть предложения?