25

I've got an input file like this:

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

I'd like to use awk to insert a blank line every few lines; for example, every two:

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

How can I get awk to put a blank line into my file every n lines?

5 Answers 5

30

A more "awk-ish" way to write smcameron's answer:

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

The "1;" is a condition that is always true, and will trigger the default action which is to print the current line.

Sign up to request clarification or add additional context in comments.

2 Comments

Same here, no? print line and print newline would need to be reversed, otherwise the newline is print before every 5th line instead of after it.
I would probably write that as '{print} NR % n == 0 { print "" }, but that is purely a style issue.
20
awk '{ if ((NR % 5) == 0) printf("\n"); print; }' 

for n == 5, of course. Substitute whatever your idea of n is.

2 Comments

If n=1, the following seem to work: awk '{print; printf("\n");}' or simply awk '{print; print "";}'
This will put the first new line before the 5th line instead of after is. print and the printf need to be reversed..
7

More awkishness:

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

For example:

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

Comments

6
awk '{print; if (FNR % 5 == 0 ) printf "\n";}' your_file 

I guess 'print' should be before 'printf', and FNR is more accurate for your task.

Comments

2
$ awk -v n=5 '$0=(!(NR%n))?"\n"$0:$0' 

If you want to change 'n', please set the parameter 'n' by awk's -v option.

1 Comment

That will be problematic when a line is blank or consists of a zero.