Используйте |
в качестве разделителя полей :, если строка содержит |
, тогда переменная NF
будет больше единицы.
awk -F'|' 'NR > 1 && NF > 1 {print ""} {printf "%s", $0} END {print ""}' file
n
пропускает обработку текущей строки и читает следующую. Точнее, команда заменяет текущий рабочий буфер sed (правильным термином «шаблон пространства» )следующей строкой. p
печатает его.
Поскольку -n
подавляет неявную печать, в результате печатается каждая вторая строка.
См. также руководство sed .
Это не имеет ничего общего с bash
оболочкой, кроме того, что вы используете ее для выполнения sed
.
Команда редактирования n
в sed
выводит текущий буфер, если вывод по умолчанию не был отключен с помощью -n
(, как это было в примере команды, которую вы показываете ), а затем вызывает следующий строка для чтения в буфер.
Команда редактирования p
выводит текущий буфер независимо от того, использовалось ли -n
или нет.
В результате каждая вторая строка, начиная с первой строки ввода, отбрасывается, а остальные печатаются.
Эффект тот же, что и при использовании sed -n '2~2p'
, sed '2~2!d'
или sed '1~2d'
при использовании GNU sed
. Это 2~2
означает «каждую вторую строку от второй строки в -подопечных», а 1~2
означает «каждую вторую строку от первой строки в -подопечных». Модификатор диапазона адресов ~
является расширением GNU sed
.
С awk
вы получите тот же эффект с awk '(FNR % 2) == 0'
, где FNR
по умолчанию — это номер строки текущего входного файла, а %
— общий оператор модуля.