bash, sed, awk: извлечение строк из диапазона - PullRequest
1 голос
/ 08 июня 2011

Как я могу получить sed для извлечения строк между двумя шаблонами, записи этих данных в файл, а затем извлечь строки между следующим диапазоном и записать этот текст в другой файл?Например, с учетом следующего ввода:

pattern_a
line1
line2
line3
pattern_b
pattern_a
line4
line5
line6
pattern_b

Я хочу, чтобы line1 line2 и line3 появлялись в одном файле, а line4 line5 и line6 появлялись в другом файле.Я не вижу способа сделать это без использования цикла и поддержания некоторого состояния между итерациями цикла, когда состояние сообщает вам, где sed должен начать поиск, чтобы снова искать шаблон запуска (pattern_a).

Например, в bash-подобном psuedocode:

while not done
  if [[ first ]]; then
    sed -n -e '/pattern_a/,/pattern_b/p' > $filename
  else
    sed -n -e '$linenumber,/pattern_b/p' > $filename
  fi
  linenumber = last_matched_line
  filename = new_filename

Есть ли отличный способ сделать это с помощью sed?Или лучше было бы?

1 Ответ

8 голосов
/ 08 июня 2011

Как насчет этого:

awk '/pattern_a/{f=1;c+=1;next}/pattern_b/{f=0;next}f{print > "outfile_"c}' input_file

Это создаст outfile_x для каждого диапазона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...