Как добавить разрывы строк после каждого n-го экземпляра разделителя в perl

Я хочу написать сценарий, который откроет файл data.txt и добавит разрыв строки после каждого n-го экземпляра «|», разделитель, так что каждая строка содержит одно наблюдение со всеми четырьмя переменными. В основном разделение и перестройка одной линии от широкой к длинной. Спасибо за вашу помощь.

Входные данные:

a1|b1|c1|d1|a2|b2|c2|d2|a3|b3|c3|d3|a4|b4|c4|d4 

Вывод:

 a1|b1|c1|d1| a2|b2|c2|d2| a3|b3|c3|d3| a4|b4|c4|d4 

3 Solutions collect form web for “Как добавить разрывы строк после каждого n-го экземпляра разделителя в perl”

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

 perl -pe 's/(.*?\|){4}\K/\n/g' 

tr и paste, а не ваш точный результат

 tr '|' '\n' <file | paste -d'|' - - - - 
 a1|b1|c1|d1 a2|b2|c2|d2 a3|b3|c3|d3 a4|b4|c4|d4 

AWK

 awk -F'|' -v OFS='|' -vn=4 '{for (i=n+1; i<=NF; i+=n) $i = "\n" $i; print}' file 
 a1|b1|c1|d1| a2|b2|c2|d2| a3|b3|c3|d3| a4|b4|c4|d4 

Использование Sed:

Портабельно:

 sed -e 's/|/&\ /4;P;D' file 

Если вы используете GNU Sed, вы можете использовать нестандартный \n для представления символа новой строки в сменном шаблоне:

 sed -e 's/|/&\n/4;P;D' file 

Команда s вставляет новую строку после четвертого | в пространстве шаблонов.

Команда P печатает до первой строки новой строки из пространства шаблонов.

Команда D удаляет первую строку строки из пространства шаблонов.

Если не было произведенной замены (менее четырех символов в пространстве шаблонов), пространство шаблонов не будет содержать новых строк, поэтому команда P будет печатать все пространство шаблона, а команда D удалит все пространство шаблона , а затем следующая строка из файла будет считана и цикл начнется.

  • perl + сочетание команды exec с perl одной линейной строкой
  • Пропустить текст в выводе с помощью grep в режиме Perl
  • Ошибка при попытке вызова find из perl
  • Способ вставки определенного столбца, когда в терминале
  • Как упомянуть rpm для поиска зависимых модулей perl в системе
  • Сопоставьте начало линии с чем-то там?
  • Какой язык сценариев или платформа использовать для загрузки веб-страниц и взаимодействия с экраном?
  • Лучший подход к созданию и добавлению содержимого в файлы
  • awk + как печатать каждую секцию строки (IP) после первого имени хоста
  • sed + как удалить символы / с, которые начинаются или заканчиваются на каждом номере
  • разделитель полей awk + count в csv и номер строки печати
  • Interesting Posts

    Как остановить «grep» от вырезания трубы

    Монтирование точек в chroot

    Процесс sshd не работает

    Почему конкретная последовательность вариантов имеет значение для команды tar?

    Установка разрешений для определенных программ для запуска в качестве гостевого

    Экран мерцает в Fedora 17

    / proc / bus / usb в / etc / fstab запрещает мой компьютер запускать графическую сессию

    extundelete не завершает работу

    AWK для печати строк, соответствующих пользовательскому вводу, введенному в определенном формате, диапазоне и т. Д.

    Как получить запрос на ключевую фразу ключевого слова SSH один раз и только при необходимости?

    поместите псевдонимую версию существующей команды в / usr / bin /

    Whonix & TorBrowser:

    Вопрос о виртуализации CentOS и KVM и PCI Passthrough

    Kali Linux Live USB загружается в текстовый режим. Не удалось запустить графический интерфейс

    сортировка игнорирует режим для второго ключа

    Linux и Unix - лучшая ОС в мире.