Intereting Posts
Когда следует сохранять отладочные символы в модулях ядра? Подключение 3G-модема работает только после Windows shell проверяет, содержит ли строка нескольких строк указанный шаблон в последней строке Как увеличить размер / dev / sda2 в suse, запущенном на vmware Возможно ли перезаписать каталог с файлом в linux Войдите в систему по ssh, выполните одну команду, и я не хочу покидать bash Почему я не могу избежать брекетов "]" в sed? Команда, чтобы скрыть все, кроме окна просмотра в окне терминала? Какой дистрибутив для обучения LPIC? Освобождение удаленного, но открытого файла журнала Каков наилучший способ отсоединить файлы с жесткой привязкой? Можно ли добавить правило политики SELinux, чтобы ограничить приложение диапазоном адресов памяти? Процедура определения местоположения среды U-Boot из двоичного / шестнадцатеричного дампа Сжатие / архивирование, которое сохраняет разрешения и владельца файла? CentOS использует .pac-файл как прокси-сервер

скопировать разделы большого файла во многие выходные файлы

У меня есть один большой файл, который выглядит так:

Header1 Subheader1 l1 l1' l1'' Header2 Subheader2 l2 l2' l2'' Headern Subheader n ln ln' ln'' 

(в котором n равно ~ 25K)

Мне нужно вставить l1-l1'', l2-l2'' ... ln-ln'' в разные файлы – скажем, file1, file2, ... file n (с определенным номером строки в файлах).

    Вы не указываете связь между заголовками и строками. Но если отношение представляет собой постоянное число строк, вы можете извлечь номера строк с помощью grep, а затем использовать sed для извлечения строк.

    Например, чтобы получить все строки после подзаголовка:

     #!/bin/bash file_in=/tmp/test.txt file_out=/tmp/file1.txt LINES=`grep -n Subheader $file_in | cut -f1 -d:` for line in $LINES; do echo $line line1=$(($line+1)) sed -n ${line1}p $file_in >> $file_out done 

    Изменить: вы можете запустить скрипт выше в цикле:

     #!/bin/bash n_max=100 file_in=/tmp/test.txt file_out=/tmp/file LINES=`grep -n Subheader $file_in | cut -f1 -d:` for n in `seq 1 $n_max`; do echo "line $n" for line in $LINES; do line_n=$(($line+$n)) sed -n ${line_n}p $file_in >> $file_out$n.txt done done exit 0 

    Мы можем сделать это следующим образом:

     perl -Mautodie -lne ' if ( /Subheader/ ... /Header/ ) { open FILE, q[>>], q[file] . ++$a if /Subheader/; close FILE if /Header/; print FILE if !/Subheader/ && !/Header/; } ' large_file.log 

    Это создаст мини-файлы file1, file2 и т. Д.

    Perl открывает новый дескриптор файла, когда встречает строку подзаголовка. И он закрывает этот файловый дескриптор, когда встречает строку заголовка. для всех остальных строк он печатается в дескриптор файла.