Запрос о значении выражения sed

Используйте |в качестве разделителя полей :, если строка содержит |, тогда переменная NFбудет больше единицы.

awk -F'|' 'NR > 1 && NF > 1 {print ""} {printf "%s", $0} END {print ""}' file
0
27.04.2021, 20:23
2 ответа

nпропускает обработку текущей строки и читает следующую. Точнее, команда заменяет текущий рабочий буфер sed (правильным термином «шаблон пространства» )следующей строкой. pпечатает его.

Поскольку -nподавляет неявную печать, в результате печатается каждая вторая строка.

См. также руководство sed .

2
28.04.2021, 22:50

Это не имеет ничего общего с 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по умолчанию — это номер строки текущего входного файла, а %— общий оператор модуля.

0
28.04.2021, 22:50

Теги

Похожие вопросы