Как добавить разрывы строк после каждого 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 удалит все пространство шаблона , а затем следующая строка из файла будет считана и цикл начнется.

  • Нужна программа командной строки для загрузки всех ссылок http: // https: // scp: // ftp: // style (например, ubuntu)
  • Вырезать файл, ограниченный числом с одной или несколькими цифрами
  • Разделить и распечатать
  • Используйте awk / sed, чтобы удалить все, кроме шаблона соответствия в определенном столбце
  • Объединение строк с общими значениями
  • заменить столбец csv-файла на столбец из другого файла
  • Чтобы заменить% меток, но не \% в Perl Regex
  • Извлечение столбца из текста, разделенного запятыми.
  • Как присоединиться к строкам с одиночными столбцами максимум до 4 столбцов в одной строке?
  • Как рассчитать (взвешенное) большинство по столбцам?
  • Сопоставьте шаблон и замените первый экземпляр строки после нее
  • automake error: Неэкранированная левая фигурная скобка в регулярном выражении устарела
  • Interesting Posts

    csh: использование -d в качестве аргумента, а не проверка

    solaris + fit egrep для solaris

    Где искать дополнительную информацию, если у меня нет Интернета?

    Редактирование текстового файла с Vim не обновляет tail -f

    Ищет документацию / procfs, описывая значения и единицы измерения

    Как я могу ограничить ширину полосы пропускания существующего процесса? (iptables, tc,?)

    Команда bash multi line с комментариями после символа продолжения

    backupninja: пароль вне файла конфигурации

    Как восстановить шрифт консоли по умолчанию и почему он изменился?

    Как изменить забытый пароль root?

    Как разрешить предупреждение о небезопасности в Swapon?

    Как просмотреть прогресс с помощью sshpass и scp в linux?

    Заполнение вкладки Bash происходит не в подстановке команд

    Когда использовать #! / Bin / ksh и #! / Bin / sh? Нужен пример

    "Find:.: Нет такого файла или каталога" при использовании find в текущем каталоге

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