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

如何使用awk每隔n行插入一个空行?,awk,blank-line,Awk,Blank Line,我有这样一个输入文件: 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行在我的文件中放一个空行 awk '{ if ((NR % 5) == 0) printf("\n"); print; }' 当然,对于n==5。无论您对n的想法是什么,都可以替换 $ awk -v n=5 '$0=(!(NR%n

我有这样一个输入文件:

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行在我的文件中放一个空行

awk '{ if ((NR % 5) == 0) printf("\n"); print; }'
当然,对于
n==5
。无论您对
n
的想法是什么,都可以替换

$ awk -v n=5 '$0=(!(NR%n))?"\n"$0:$0'
如果要更改“n”,请通过awk的-v选项设置参数“n”。

一种更为“awk-ish”的方法来编写smcameron的答案:

awk -v n=5 '1; NR % n == 0 {print ""}'
“1;”是一个始终为真的条件,将触发打印当前行的默认操作

awk '{print; if (FNR % 5 == 0 ) printf "\n";}' your_file
我想“print”应该在“printf”之前,FNR对于您的任务更准确。

更糟糕的是:

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

如果n=1,以下操作似乎有效:
awk'{print;printf(“\n”);}'
或干脆
awk'{print;print”“;}'
这将把第一个新行放在第五行之前,而不是后面。print和printf需要颠倒。当一行为空或由零组成时,这将有问题。这里也是,不是吗?打印行和打印换行符需要颠倒,否则换行符将在每5行之前而不是之后打印。我可能会将其写成
{print}NR%n==0{print”“}
,但这纯粹是样式问题。