2016-09-29 2 views
0

Что я имею в виду, так это то, что я хочу искать «вещь1», а затем я хочу найти «вещь2» на основе позиции «thing1». И я хочу отобразить их обоих в результате в том порядке, в котором они находятся в коеде.Условные поиски grep/ack?

например. Я нахожу «вещь1» в строке 100. Затем я хочу найти первую «вещь2», которая встречается до «thing1». Затем я хочу отобразить оба из них в порядке «thing2», затем «thing1». Я хочу сделать это для каждого экземпляра «thing1», который я нахожу.

Причина в том, что я хочу найти определенные строки, которые, как я знаю, будут в списках (python), и я тоже хочу знать название списков. Поэтому я подумал, что могу найти строку, а затем отобразить первый знак «= [», который встречается перед строкой.

Так что, если файл имеет:

my_list = [ 
    'item1', 
    'item2', 
    'item3', 
] 

my_other_list = [ 
    'item4', 
    'item5', 
    'item3', 
] 

и создать поиск, который ищет 'item3', а затем оглядывается назад, чтобы найти предыдущие '= ['

, то выход должен быть (не включая номера строк, которые Grep и извед поместит):

my_list = [ 
    'item3', 

my_other_list = [ 
    'item3', 
+1

вы можете добавить образец данных и требуемой производительности? –

+0

Помог ли мой ответ решить вашу проблему? Если да, пожалуйста, подумайте о том, чтобы принять его как ваш ответ - нажав полый зеленый галочку/галочку рядом с подсчетом голосов. Если нет, скажите, пожалуйста, что не сработало, чтобы я или кто-то еще помог вам дальше. Благодарю. http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235 –

ответ

0

Я думаю, что вы хотите:

awk '/=/{thing2=$0} /item3/{print thing2;print $0,"\n"}' YourFile 

Итак, каждый раз, когда вы видите =, вы помните, что линия thing2. Когда вы увидите item3, вы печатаете последние thing2, которые вы видели, и текущую строку.

Пример вывода

my_list = [ 
    'item3', 

my_other_list = [ 
    'item3', 
Смежные вопросы