Как добавить разрывы строк после каждого 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 

  • Уведомление IRSSI - методом вытягивания
  • Какой язык сценариев или платформа использовать для загрузки веб-страниц и взаимодействия с экраном?
  • Перечислите дни рождения в том порядке, в котором они придут с сегодняшнего дня
  • carton: команда не найдена
  • Сценарий Bash не может найти модуль perl
  • Переформатирование документа LaTeX по perl
  • Считать частоту конкретных чисел в текстовом файле научных обозначений
  • Совместить данные из двух разных файлов
  • 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 удалит все пространство шаблона , а затем следующая строка из файла будет считана и цикл начнется.

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