0

我有以下格式的数据

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 
4

2 回答 2

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定义在输出时应如何分隔记录。我们要么将 的值设置ORSOFS要么RS RS取决于当前行上的字段数。OFS是输出字段分隔符,默认情况下是空格,RS是输入记录分隔符,默认情况下是换行符。尾随的 1 只是awk打印当前记录的习惯用法。

于 2013-09-10T14:38:42.077 回答
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 
于 2013-09-10T14:40:48.480 回答