Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can join consecutive non-empty lines using sed/awk?

How can i join consecutive non-empty lines into a single lines using sed or awk? An example is given of what I am trying to do.

Input:

aaa ff gg
bbb eee eee
ss gg dd

aaa ff gg
bbb eee eee
ss gg dd

aaa ff gg
bbb eee eee
ss gg dd

Converts to

aaa ff gg bbb eee eee ss gg dd

aaa ff gg bbb eee eee ss gg dd

aaa ff gg bbb eee eee ss gg dd
like image 402
Schon Avatar asked Jun 29 '26 21:06

Schon


2 Answers

Not sure if you REALLY want a blank line between each data line or not so here's both:

$ awk -v RS= '{$1=$1}1' file
aaa ff gg bbb eee eee ss gg dd
aaa ff gg bbb eee eee ss gg dd
aaa ff gg bbb eee eee ss gg dd

$ awk -v RS= -v ORS='\n\n' '{$1=$1}1' file
aaa ff gg bbb eee eee ss gg dd

aaa ff gg bbb eee eee ss gg dd

aaa ff gg bbb eee eee ss gg dd
like image 166
Ed Morton Avatar answered Jul 03 '26 15:07

Ed Morton


This might work for you (GNU sed):

sed ':a;N;/\n$/!s/\n/ /;ta' file

Unless the last line appended is empty, replace a newline by a space and repeat. Otherwise print and repeat.

If you want empty lines deleted, then:

sed ':a;N;/\n$/!s/\n/ /;ta;P;d' file
like image 42
potong Avatar answered Jul 03 '26 15:07

potong