我试图弄清楚如何使用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工具可以做到这一点?
由于
答案 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