LINUX.ORG.RU

Разбиение одного текстового файла на два конкретной строкой.


0

0

Есть такая задача: Большой текстовой файл, в нем встречается одна конкретная строка. Как все что есть до этой строки поместить в один файл, а все что после в другой? Интересует наиболее оптимальный способ (желательно bash-скрипт). У меня есть вариант через awk вводить переменную, которая меняет свое значение с 0 на 1 если при переборе строка совпадает с шаблоном. И соответственно когда переменная равна 0 перенаправляем строки в один файл, когда 1 в другой. Может кто-то еще более приличное предложит :)

anonymous

можно с помощью nl и grep найти номер строки, а потом head и tail выделить части. Но вариант с awk по моему лучше.

dilmah ★★★★★
()

вот те одной строкой ;)

perl -e '$b=0;@a=`cat file`;open F1,">>file1";open F2,">>file2"; for(@a){if($_ eq "stroka\n"){$b=1;goto next}; $b==1 ? print F2 $_ : print F1 $_ ; }'

замени file на имя файла со строкой, file1 на имя файла в который надо писать ДО нахождения, и file2 после. также замени stroka на твою строку. только "\n" не трожь.

norden ★★
()

Все что нужно

man csplit

qwe ★★★
()
Ответ на: комментарий от norden

Большое спасибо за советы, на перле наверно будет понадежнее чем на awk - так и сделаю. csplit - хорошая утилита, не знал про нее, но в данной ситуации мне не очень подходит, т.к. разбивает на конкретные файлы типа file01, file02... а надо задавать имя самому.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.