AWK-как присвоить значение переменной из соответствующего регулярного выражения, которое приходит позже?



Пока у меня есть этот awk скрипт,



/regex2/{
var = $1}

/regex1/{
print var}


, который я выполнил над входным файлом :



regex1

This should be assigned as variable regex2


Я не получил никакой печатной продукции. Желаемый результат:" это " должно быть распечатано.

Я мог бы тогда подумать, чтобы использовать BEGIN:



BEGIN{
/regex2/
var = $1}

/regex1/{
print var}


Но, видимо, начинать не предусмотрена функция сопоставления регулярных выражений. Любое предложение в этом?

527   2  

2 ответов:

Это позволило бы достичь желаемого результата:

awk '/regex2/ { print $1 }'

В противном случае вам нужно будет прочитать файл дважды и выполнить что-то вроде следующего. Он будет хранить последнее вхождение /regex2/ в var. При повторном чтении файла он будет печатать var для каждого вхождения /regex1/. Обратите внимание, что вы получите пустую строку в выводе и ключевое слово "This"в новой строке:

awk 'FNR==NR && /regex2/ { var = $1; next } /regex1/ { print var }' file.txt{,}

Обычно такого рода вещи делаются с флагом:

/regex1/ { f = 1 }
f && /regex2/ { var = $1; f = 0 }

Comments

    Ничего не найдено.