删除空格时展开段落
Unwrap paragraphs while deleting spaces
我在尝试弄清楚如何使用 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 工具可以做到这一点?
谢谢
如果其后跟 26
spaces:
,这将切断换行符
awk '{printf "%s",(/^ /?[=10=]:RS [=10=])}' file
您是否也想删除 26
space?
awk '{printf "%s",(/^ /?[=11=]:RS [=11=])}' 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 spaces.
开头,则删除换行符和 6 space
cat file
data here
more data
not here
but this is new line
so i this
这里是一个完整的awk
顶部没有空行,正确的结尾。
awk '{split([=13=],a," ")} NR==1 {a[2]=[=13=]} {printf "%s",(/^ /||NR==1?a[2]:RS [=13=])}END{print ""}' file
data here more data not here
but this is new line
so i this
重写代码:
awk '{printf "%s",(gsub(/ {5}/,"")||NR==1?[=14=]:RS [=14=])} END {print ""}' file
data here more data not here
but this is new line
so i this
如果 {5}
(space 的数量)不起作用,请尝试将 --re-interval
添加到您的 awk
命令,或者只使用 [=36 的数量=]你需要的。
使用 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
我在尝试弄清楚如何使用 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 工具可以做到这一点?
谢谢
如果其后跟 26
spaces:
awk '{printf "%s",(/^ /?[=10=]:RS [=10=])}' file
您是否也想删除 26
space?
awk '{printf "%s",(/^ /?[=11=]:RS [=11=])}' 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 spaces.
cat file
data here
more data
not here
but this is new line
so i this
这里是一个完整的awk
顶部没有空行,正确的结尾。
awk '{split([=13=],a," ")} NR==1 {a[2]=[=13=]} {printf "%s",(/^ /||NR==1?a[2]:RS [=13=])}END{print ""}' file
data here more data not here
but this is new line
so i this
重写代码:
awk '{printf "%s",(gsub(/ {5}/,"")||NR==1?[=14=]:RS [=14=])} END {print ""}' file
data here more data not here
but this is new line
so i this
如果 {5}
(space 的数量)不起作用,请尝试将 --re-interval
添加到您的 awk
命令,或者只使用 [=36 的数量=]你需要的。
使用 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