Intereting Posts
Как безопасно удалить обычный каталог, содержащий несколько снимков btrfs внутри него? Продолжайте получать ошибки при попытке установить внешний жесткий диск с форматом LVM2, используя Knoppix с живого USB, пожалуйста, помогите Зеркало localhost: 3280 / some / long / url to localhost: 3000 Как загрузить адрес электронной почты, который вызывается на веб-странице с помощью wget? как открыть чей-то общий календарь на thunderbird Linux Mint: невозможно удалить / удалить виртуальный бокс Как заставить разрешение дисплея при загрузке с Debian Wheezy? Оптимальный Linux Distro для установки на SD-карту для использования в качестве USB-загрузчика для ПК? Лучший язык для написания услуг linux Случайно удаленные / etc / network / interfaces на Ubuntu Markdown Viewer поиск всех слов в текстовом файле, появляющемся в другом текстовом файле Пусть шифрование – nginx – скрепление OCSP Когда exFAT приходит в Linux? Ошибка после установки: нет такого устройства. спасение грибов

Как разделить текст между разделителем на несколько файлов?

У меня есть текстовый файл, содержащий следующее:

"random textA" "random random textB" 

Сепаратор – это "

Как я могу разделить содержимое в несколько файлов следующим образом, используя команду bash?

Файл 1:

 random textA 

Файл 2:

 random random textB 

Я пришел к примерам с помощью csplit или awk но они не охватывают этот макет текста.

Простая команда awk :

 awk 'NR%2==0{ print $0 > "File "++i }' RS='"' file 

RS определяет " как разделитель записи, а NR – номер записи. Если номер записи был по модулю 2 (потому что у нас есть еще один первый " для записей), тогда распечатайте запись ( $0 ) в File # .

С GNU awk

 awk -v RS='"[[:space:]]*"' ' {sub(/^"|"[[:space:]]*$/, "");print > "output." ++n; close("output." n)}' file.txt 

Если вводная цитата всегда находится в начале строки, csplit будет работать как раз так:

 bash$ csplit /tmp/data '/^"/' 

Это создает файлы с именем xx00 и т. Д. Обратите внимание, что в вашем примере удаляются кавычки, и это не так. Для этого вам понадобится командная строка sed:

 bash$ for file in xx* ; do { sed 's/^"//;s/"$//;' ${file} >x${file}; } ; done 

Ты можешь сделать:

 awk -v RS=\" -v ORS= \ '{ sub(/^\n*/,"");sub(/\n*$/,""); }; /^\n*$/ { next;}; { if(strcnt==0) { print $0 >"file1"; strcnt++;} else { print $0 >"file2"; }; }' file