删除空格时展开段落

时间:2015-03-10 06:21:38

标签: linux sed tr

我试图弄清楚如何使用sed,tr等来更改文件的格式,这让我感到沮丧。我确定有一些正确的答案可以做我想做的事情要做,我只是不知道它是什么。

这是我的问题。我有一个如下所示的数据文件:

   8587  812.700  152.791  12.7410   0.0372  99.9999   9.9999  12.2520   0.0436  99.9999   9.9999  99.9999   9.9999  99.9999   9.9999
                           99.9999   9.9999  99.9999   9.9999  99.9999   9.9999  99.9999   9.9999  99.9999   9.9999  99.9999   9.9999
                           99.9999   9.9999  99.9999   9.9999  99.9999   9.9999  13.1942   0.0589  99.9999   9.9999  99.9999   9.9999
                           99.9999   9.9999  12.9601   0.1323  99.9999   9.9999   1.0337   0.3166

我想把它变成一条线。每个文件中大约有10,000个这样的块。我想我想删除任何换行字符后跟26个空格,这样就可以完成这个工作,并为下一个区块保留换行符。

那么,有没有方便的linux工具可以做到这一点?

由于

2 个答案:

答案 0 :(得分:0)

如果后面跟26个空格,则会删除换行符:

awk '{printf "%s",(/^                          /?$0:RS $0)}' file

您是否还想删除26空格?

awk '{printf "%s",(/^                          /?$0:RS $0)}' file | awk '{gsub(/                          /,"")}1'
   8587  812.700  152.791  12.7410   0.0372  99.9999   9.9999  12.2520   0.0436  99.9999   9.9999  99.9999   9.9999  99.9999   9.9999 99.9999   9.9999  99.9999   9.9999  99.9999   9.9999  99.9999   9.9999  99.9999   9.9999  99.9999   9.9999 99.9999   9.9999  99.9999   9.9999  99.9999   9.9999  13.1942   0.0589  99.9999   9.9999  99.9999   9.9999 99.9999   9.9999  12.9601   0.1323  99.9999   9.9999   1.0337   0.3166

另一个例子:
如果下一行以6个空格开头,则删除换行符和6个空格。

cat file
data here
      more data
      not here
but this is new line
so i this

这里只有一个awk而没有在顶部给出空白行,并且正确结束。

awk '{split($0,a,"     ")} NR==1 {a[2]=$0} {printf "%s",(/^      /||NR==1?a[2]:RS $0)}END{print ""}' file
data here more data not here
but this is new line
so i this

重写代码:

awk '{printf "%s",(gsub(/ {5}/,"")||NR==1?$0:RS $0)} END {print ""}' file
data here more data not here
but this is new line
so i this

如果{5}(空格数)不起作用,请尝试将--re-interval添加到awk命令,或者只使用所需的空格数。

答案 1 :(得分:0)

使用GNU awk进行多字符RS:

$ gawk -vRS='^$' -vORS= '{gsub(/\n {26}/,"")}1' file
   8587  812.700  152.791  12.7410   0.0372  99.9999   9.9999  12.2520   0.0436  99.9999   9.9999  99.9999   9.9999  99.9999   9.9999 99.9999   9.9999  99.9999   9.9999  99.9999   9.9999  99.9999   9.9999  99.9999   9.9999  99.9999   9.9999 99.9999   9.9999  99.9999   9.9999  99.9999   9.9999  13.1942   0.0589  99.9999   9.9999  99.9999   9.9999 99.9999   9.9999  12.9601   0.1323  99.9999   9.9999   1.0337   0.3166