Как вставить пустую строку каждые n строк с помощью awk? - PullRequest
18 голосов
/ 10 июня 2009

У меня есть такой файл ввода:

line 1
line 2
line 3
line 4
line 5
line 6

Я бы хотел использовать awk для вставки пустой строки каждые несколько строк; например, каждые два:

line 1
line 2

line 3
line 4

line 5
line 6

Как получить от awk пустую строку в мой файл каждые n строк?

Ответы [ 5 ]

23 голосов
/ 11 июня 2009

Более "awk-ish" способ написать ответ smcameron:

awk -v n=5 '1; NR % n == 0 {print ""}'

"1;" является условием, которое всегда истинно и будет вызывать действие по умолчанию, которое заключается в печати текущей строки.

18 голосов
/ 10 июня 2009
awk '{ if ((NR % 5) == 0) printf("\n"); print; }'

для n == 5, конечно. Замените то, что вы думаете о n.

3 голосов
/ 15 марта 2013

Больше неловкости:

awk 'ORS=NR%5?RS:RS RS'

Например:

$ printf "%s\n" {1..12} | awk 'ORS=NR%5?RS:RS RS'
1
2
3
4
5

6
7
8
9
10

11
12
3 голосов
/ 23 июня 2009
awk '{print; if (FNR % 5 == 0 ) printf "\n";}' your_file

Я полагаю, что print должен быть перед printf, а FNR более точен для вашей задачи.

1 голос
/ 11 июня 2009
$ awk -v n=5 '$0=(!(NR%n))?"\n"$0:$0'

Если вы хотите изменить 'n', установите параметр 'n' с помощью опции -v в awk.

...