Как добавить N пустых строк между всеми строками текстового файла? - PullRequest
3 голосов
/ 07 ноября 2019

У меня есть файл, который выглядит

a
b
c
d

Предположим, я хочу добавить N строк (в примере 3, но на самом деле мне нужно 20 или 100 в зависимости от файла)

a


b


c


d 

Я могу добавить одну пустую строку между ними с помощью sed

sed -i '0~1 a\\' file

Но sed -i '0~3 a\\' file вставляет одну строку каждые 3 строки.

Ответы [ 4 ]

5 голосов
/ 07 ноября 2019

Вы можете использовать с GNU sed:

sed -i 'G;G;G' file

. G;G;G добавит три пустые строки под каждой не финальной строкой.

Или, awk:

awk 'BEGIN{ORS="\n\n\n"};1'

См. онлайн sed и awk demo .

Если вам нужно установить число новых строк, используйте

nl="
"
awk -v nl="$nl" 'BEGIN{for(c=0;c<3;c++) v=v""nl;ORS=v};1' file > newfile
3 голосов
/ 07 ноября 2019

С GNU awk:

awk -i inplace -v lines=3 '{print; for(i=0;i<lines;i++) print ""}' file

Обновление с подсказками Эда (см. Комментарии):

awk -i inplace -v lines=3 '{print; for(i=1;i<=lines;i++) print ""}' file

Обновление (без конечных пустых строк):

awk -i inplace -v lines=3 'NR==1; NR>1{for(i=1;i<=lines;i++) print ""; print}' file

Вывод на file:

a



b



c



d
2 голосов
/ 07 ноября 2019

С sed и corutils:

N=4
sed "\$b;$(yes G\; | head -n$N)" infile

Подобный трюк с awk:

N=4
awk 1 RS="$(yes \\n | head -n$N | tr -d '\n')" infile
1 голос
/ 08 ноября 2019

Это может работать для вас (GNU sed):

sed ':a;G;s/\n/&/2;Ta' file

Это добавит 2 пустые строки после каждой строки.

Измените 2 на любое число между каждой строкой.

Альтернатива (более эффективная?):

sed '1{x;:a;/^.\{2\}/!s/^/\n/;ta;s/.//;x};G' file
...