2

我有一个看起来像的大文本文件

some random : demo text for
illustration, can be long

and : some more

here is : another
one

我想要一个像这样的输出

some random : demo text for illustration, can be long
and : some more
here is : another one

我尝试了一些奇怪的,明显错误的正则表达式,%s/\w*\n/ /g但无法真正理解。

4

2 回答 2

2

使用您显示的示例,请尝试以下awk代码。使用 RS(记录分隔符),将其设置为无效。这仅基于您显示的示例。

awk -v RS="" '{$1=$1} 1' Input_file
于 2021-07-03T13:06:54.593 回答
0

添加另一个解决方案以防有人正在寻找printf. awk尽管应使用此处提供的第一个解决方案恕我直言,但也可以在此处添加这些解决方案。

第二种解决方案:添加解决方案以检查行是否以字母开头,然后仅将它们与前一行添加。

awk '{printf("%s%s",$0~/^[a-zA-Z]/?(FNR>1 && prev~/^[a-zA-Z]/?OFS:""):ORS,$0);prev=$0} END{print ""}' Input_file

第三种解决方案:注意:仅当您的行中存在冒号时,这才有效,如显示的示例所示。

awk '{printf("%s%s",$0~/:/?(FNR>1?ORS:""):OFS,$0)} END{print ""}'  Input_file

解释:使用printf的函数awk。然后使用条件,如果当前行有:且大于 1 则打印 ORS 否则不打印任何内容。如果行不包含:打印OFS。在END这个程序的块中打印换行符。

于 2021-07-03T13:45:11.383 回答