Мне нужно иметь возможность искать строку (давайте использовать 4320101), печатать 20 строк над строкой и печатать после этого, пока не найдет строку
Например:
Random text I do not want or blank line
16 Apr 2013 00:14:15
id="4320101"
</eventUpdate>
Random text I do not want or blank line
Я просто хочу, чтобы в файл выводился следующий результат:
16 Apr 2013 00:14:15
id="4320101"
</eventUpdate>
В файле, который мне нужен, есть несколько примеров этих групп текста.
Я попытался использовать это ниже:
cat filename | grep "</eventUpdate>" -A 20 4320101 -B 100 > greptest.txt
Но он показывает только 20 строк по обе стороны от строки.
Примечания:
- номер строки, на которой находится текст, несовместим, поэтому я не могу отказаться от них, поэтому я использую -A 20.
- в идеале я бы предпочел, чтобы при поиске после строки, он останавливается, когда находит, а затем продолжает поиск.
Итог: найдите 4320101, выведите 20 строк выше 4320101 (или одну строку пробела), а затем выведите все строки ниже 4320101 до
</eventUpdate>
Проводя исследование, я не уверен, как заставить awk, nawk или sed работать в мою пользу, чтобы сделать это.
-A
- это количество строк, которые grep будет печататьA
после совпадающей строки. Если вам не нужны строки после совпадающей строки, почему вы просите 20? Также я не понимаю вашего комментария о непоследовательности номеров строк, но если вы хотите 20 строкB
efore, используйте-B 20
- person rici   schedule 22.05.2013ed
(иsed
, иsort
, и сноваsed
) в каждом файле - это было бы проще всего адаптировать. Свяжитесь со мной (см. мой профиль), если вы хотите это; они не являются полностью проработанными решениями вашей проблемы, но могут быть полезными ступеньками для ее решения. - person Jonathan Leffler   schedule 22.05.2013