Как распечатать строку, за которой следует конкретная строка в повторяющемся файле?

Это мой первый вопрос, и я надеюсь, что вы можете мне помочь.

У меня есть текстовый файл с тысячами повторений, подобных этому:

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

Я думаю, это могло бы выполняться с условным поиском, который печатает первую предыдущую строку, начинающуюся с «Запроса». Но любой способ сделать это будет потрясающе.

1
задан 31 May 2016 в 19:56

1 ответ

Эта команда 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), строка, которую вы для поиска нет специальных символов регулярных выражений, таких как . или *. Если это так, возможно, потребуется использовать другую функцию.
1
ответ дан 23 May 2018 в 10:33

Другие вопросы по тегам:

Похожие вопросы: