awk распечатать совпадение, только если последняя запись перед другим совпадением

Я хочу использовать awk для печати соответствия некоторого шаблона, только если это последняя строка файла перед некоторым постоянным текстом.

Например, я хочу напечатать значение «c», только если это последняя строка перед некоторым постоянным текстом:

cat file.txt: a=1 b=2 c=3 ...constant text... 

печать 3.

 cat file.txt: a=1 c=3 b=2 ...constant text... 

ничего не печатайте.

Как это сделать..? Как awk может узнать, является ли это последним номером файла?

2 Solutions collect form web for “awk распечатать совпадение, только если последняя запись перед другим совпадением”

Я хочу использовать awk для печати соответствия некоторого шаблона, только если это последняя строка файла перед некоторым постоянным текстом.

В этом случае попробуйте следующее:

 awk -F= '/constant text/ && name=="c"{print value} {name=$1;value=$2}' file 

Примеры

 $ cat file1 a=1 b=2 c=3 ...constant text... $ awk -F= '/constant text/ && name=="c"{print value} {name=$1;value=$2}' file1 3 $ cat file2 a=1 c=3 b=2 ...constant text... $ awk -F= '/constant text/ && name=="c"{print value} {name=$1;value=$2}' file2 $ 

Как это работает

  • -F=

    Это говорит awk использовать = в качестве разделителя полей. Таким образом, мы можем отделить имя и значение для полей, таких как a=1 или c=3 .

  • /constant text/ && name=="c"{print value}

    Если мы достигнем строки с constant text и name (как последним, установленным в предыдущей строке), c , тогда напечатайте value .

  • name=$1;value=$2

    Для текущей строки сохраните первое поле как name и второе поле как value .

Некоторые поисковики нашли мне лучший ответ, хотя у меня уже есть ответ: использование tac делает его намного проще …

tac file | awk 'NR==2{if ( $1=="c") print $2}'

Номер строки один после «постоянного текста». Если «постоянный текст» – одна строка – NR==2 . Если это две строки – NR==3 . Еще не решил, в каком формате должен быть постоянный текст …

  • Распределение памяти для разреженного массива в awk
  • Найти и заменить строки в текстовом файле на выходе из другого файла
  • Как я могу отредактировать редактируемый результат?
  • Объединение двух файлов в столбцы
  • Объединение столбцов в файл с помощью Awk
  • Разделение имен, разделенных символом «| характер "для отдельных пар
  • Как добавить столбец в начало файла с помощью perl?
  • linux + awk + манипуляция файлами
  • Использовать данные канала Pandoc с AWK
  • как сделать форматирование файла в unix
  • Регулярные выражения внутри строки в AWK, используя if / then структуру управления?
  • Linux и Unix - лучшая ОС в мире.