使用 awk 在匹配后连接行

ari*_*lle 3 bash awk

我有一个如下所示的列表:

>aaa(+)
AAAAAAAAAA
>bbb(+)
BBBBBBBBBBBBBBBB
>ccc(-)
CCCCCCC
Run Code Online (Sandbox Code Playgroud)

我想使用 awk 在“(+)”或“(-)”之后加入下一行,并使用逗号分隔符,这样它看起来像这样:

>aaa(+),AAAAAAAAAAA
>bbb(+),BBBBBBBBBBBBBBBB
>ccc(-),CCCCCCC
Run Code Online (Sandbox Code Playgroud)

我已经尝试过以下操作(在 bash 中):

cat $file | awk '/(-)/||/(+)/{if (x)print x;x"";}{x=(!x)?$0:x","$0;}END{print x;}' > $new_file
Run Code Online (Sandbox Code Playgroud)

但这似乎给出了这样的结果:

>aaa(+),AAAAAAAAAAA
>aaa(+),AAAAAAAAAAA,>bbb(+),BBBBBBBBBBBBBBBB
>aaa(+),AAAAAAAAAAA,>bbb(+),BBBBBBBBBBBBBBBB,>ccc(-),CCCCCCC
Run Code Online (Sandbox Code Playgroud)

这显然不是我想做的。

任何帮助将不胜感激!

谢谢

Ken*_*ent 6

这个 awk 一行应该适用于您的示例:

awk '/^>/{printf "%s,",$0;next}7' file
Run Code Online (Sandbox Code Playgroud)

>它将从下面的行开始的行连接起来。如果(+/-)是键,您可以将模式更改为您感兴趣的键。


kar*_*kfa 6

另一个极简主义awk

$ awk 'ORS=/^>/?",":RS' file 
Run Code Online (Sandbox Code Playgroud)