删除换行符,但留下一些

时间:2013-09-10 14:31:33

标签: bash sed awk

我的数据格式如下

45280550 45280550 45280550 45280550 45280550 45280550 45280550 
45280550 45280550 45280550 45280550 45280550 45280550 45280550 
45280550 45280550 45280550 45280550 45280550 45280550 45280550 

45280550 45280550 45280550 45280550 45280550 45280550 45280550 
45280550 45280550 45280550 45280550 45280550 45280550 45280550 

45280550 45280550 45280550 45280550 45280550 45280550 45280550 

在7组8个字符之后有换行符,并且在文本块之间也有换行符。

我想删除文本块中的换行符,但留下块之间的间隙,以便最终看起来像

45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550     45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 

45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 

45280550 45280550 45280550 45280550 45280550 45280550 45280550 

2 个答案:

答案 0 :(得分:2)

使用简化示例:

$ cat file
1 2 3
4 5 6
7 8 9

1 2 3
4 5 6

1 2 3

以下内容将解决您的问题:

$ awk '{ORS=(NF?OFS:RS RS)}1' file
1 2 3 4 5 6 7 8 9 

1 2 3 4 5 6 

1 2 3 

<强>解释

输出记录分隔符ORS定义了如何在输出中分隔记录。我们将ORS的值设置为OFSRS RS,具体取决于当前行的字段数。 OFS是输出字段分隔符,默认情况下是空格,RS是输入记录分隔符,默认情况下是换行符。尾部1只是一个awk成语来打印当前记录。

答案 1 :(得分:2)

awk '{ printf("%s", NF ? $0 : "\n\n") } END { if(NF) print "" }' file

输出:

45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 

45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 45280550 

45280550 45280550 45280550 45280550 45280550 45280550 45280550