Awk 如果当前行末尾包含图案,则合并下一行

Awk 如果当前行末尾包含图案,则合并下一行,awk,sed,tr,Awk,Sed,Tr,我有一个很大的文本文件。如果当前行末尾有单词或,我想将下一行合并到当前行中。 就像下面几行一样 somerandomstring OR someotherrandomstring 以上两行应为 somerandomstring OR someotherrandomstring 只有这些行应该改变。其余的线路必须保持原样。提前谢谢 请允许我把问题再延伸一点。 我还想看看下一行是否以OR开头,而OR不在当前行的末尾,那么如何将上述情况和本例一起实现 您可以在awk中执行此操作,方法是将“OR”行

我有一个很大的文本文件。如果当前行末尾有单词或,我想将下一行合并到当前行中。 就像下面几行一样

somerandomstring OR
someotherrandomstring
以上两行应为

somerandomstring OR someotherrandomstring
只有这些行应该改变。其余的线路必须保持原样。提前谢谢

请允许我把问题再延伸一点。
我还想看看下一行是否以OR开头,而OR不在当前行的末尾,那么如何将上述情况和本例一起实现

您可以在
awk
中执行此操作,方法是将“OR”行指定给变量,并在未找到“OR”时打印变量中存储的内容

这也适用于可能有“或”的多行,方法是将该行连接到
buffer
变量,直到找到非OR行,打印该行并清除
buffer
变量


awk
中的另一个选项是在OR行上使用
printf
,在非OR行上使用
print
(这类似于@cyrus使用的GNU示例,但在awk中)

这是同一个beast,但在
printf
中使用三元运算符:

awk '{printf $NF=="OR"?"%s ":"%s\n", $0}' test.txt
使用GNU时:

sed '/ OR$/{N;s/\n/ /}' file
在行尾(
$
)搜索空格,后跟
,如果找到,则将下一行(
N
)读到模式空间,并将模式空间中的换行符(使用
s//
)替换为一个空格


如果要“就地”编辑文件,请使用sed的选项
-i

另一个
awk

$2$ awk -v RS='^$' -v k='OR' '{gsub(k ORS,k FS); gsub(ORS k,FS k); printf "%s",$0}' file

x OR y
x OR y
用于测试输入文件

$ cat file

x OR
y
x
OR y

是的,它正在工作。谢谢你能告诉我,如果下一行也是以OR开头的(不是最后一行),那么我怎样才能达到同样的效果。我想同时考虑这两种情况。这就是:“第1行或第2行还是第3行”,你想要输出的“第1行或第2行还是第3行”?实际上,没有要求“第1行或/第2行/或第3行”必须按该顺序排列。行的结尾或行的开头完全是随机的。
$2$ awk -v RS='^$' -v k='OR' '{gsub(k ORS,k FS); gsub(ORS k,FS k); printf "%s",$0}' file

x OR y
x OR y
$ cat file

x OR
y
x
OR y