Учитывая одну интерпретацию вашего вопроса, это может быть то, что вам нужно:
Если pattern
означает regexp
и все в порядке с частичными, а не полными совпадениями, то:
tac file | awk '/pattern1/{line=$0; f=1} /pattern2/{exit} END{if (f) print line}'
Если вам нужны полные совпадения регулярных выражений, добавьте начальные / конечные якоря (/^pattern1$/
) и сравните их с конкретным полем (например, $4 ~ /^pattern1$/
) вместо всей строки, если вам нужно слово вместо совпадений строк.
Если вам нужно совпадение строк вместо регулярного выражения, тогда используйте index()
или ==
против $0
или $N
(где N - номер целевого поля) в зависимости от ситуации.
Если pattern1 и pattern2 являются переменными оболочки и дан целый ряд предположений о том, каким может быть "pattern":
tac file | awk -v re1="$pattern1" -v re2="$pattern2" '$0 ~ re1{line=$0; f=1} $0 ~ re2{exit} END{if (f) print line}'