Это мой первый вопрос, и я надеюсь, что вы можете мне помочь.
У меня есть текстовый файл с тысячами повторений, подобных этому:
Query= AX-1
[some lines without pattern]
A1
B2
C3
R7
Query= AX-2
[some lines without pattern]
A1
F5
Query= AX-3
[some lines without pattern]
S9
T4
F5
Мне нужно распечатать все запросы, содержащие определенную строку. Например, если я ищу F5, я должен получить:
AX-2
AX-3
и искать F5 должен печатать:
AX-1
AX-2
Я думаю, это могло бы выполняться с условным поиском, который печатает первую предыдущую строку, начинающуюся с «Запроса». Но любой способ сделать это будет потрясающе.
Эта команда awk могла выполнить задание:
awk -v RS='\n\n' -v target=<string> '$0 ~ target {print $2}'
Например:
$ awk -v RS='\n\n' -v target=F5 '$0 ~ target {print $2}' foo.txt
AX-2
AX-3
$ awk -v RS='\n\n' -v target=A1 '$0 ~ target {print $2}' foo.txt
AX-1
AX-2
Я предполагаю, что:
разделы запроса все разделители пустые строки (следовательно, две новые строки \n\n в качестве разделителя записей), после Query= есть пробел, так что строка, которую вы хотите распечатать, является вторым полем ($2), строка, которую вы для поиска нет специальных символов регулярных выражений, таких как . или *. Если это так, возможно, потребуется использовать другую функцию.