如何使用awk每n行插入一个空行?

19 awk blank-line

我有一个像这样的输入文件:

line 1
line 2
line 3
line 4
line 5
line 6
Run Code Online (Sandbox Code Playgroud)

我想用awk每几行插一个空白行; 例如,每两个:

line 1
line 2

line 3
line 4

line 5
line 6
Run Code Online (Sandbox Code Playgroud)

我怎么能得到awk每n行给我的文件写一个空行?

gle*_*man 24

写一个更为"awk-ish"的方式来写smcameron的答案:

awk -v n=5 '1; NR % n == 0 {print ""}'
Run Code Online (Sandbox Code Playgroud)

"1;" 是一个始终为true的条件,并将触发默认操作,即打印当前行.

  • 我可能会把它写成''{print} NR%n == 0 {print""}`,但这纯粹是一种风格问题. (3认同)

smc*_*ron 18

awk '{ if ((NR % 5) == 0) printf("\n"); print; }'
Run Code Online (Sandbox Code Playgroud)

因为n == 5,当然.替换你的想法n.


Scr*_*zer 6

更尴尬:

awk 'ORS=NR%5?RS:RS RS'
Run Code Online (Sandbox Code Playgroud)

例如:

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

6
7
8
9
10

11
12
Run Code Online (Sandbox Code Playgroud)


小智 5

awk '{print; if (FNR % 5 == 0 ) printf "\n";}' your_file
Run Code Online (Sandbox Code Playgroud)

我猜'print'应该在'printf'之前,并且FNR对您的任务更准确。