在比赛后使用awk联接线 [英] Using awk to join lines following a match
本文介绍了在比赛后使用awk联接线的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个看起来像这样的列表:
I have a list that looks like this:
>aaa(+)
AAAAAAAAAA
>bbb(+)
BBBBBBBBBBBBBBBB
>ccc(-)
CCCCCCC
我想使用awk在逗号分隔符的((+)'或'(-)'之后加入下一行,这样看起来像这样:
And I want to use awk to join the next line after either '(+)' or '(-)', with a comma delimiter, so that it looks like this:
>aaa(+),AAAAAAAAAAA
>bbb(+),BBBBBBBBBBBBBBBB
>ccc(-),CCCCCCC
我已经尝试了以下操作(以bash格式):
I have already tried the following (in bash):
cat $file | awk '/(-)/||/(+)/{if (x)print x;x"";}{x=(!x)?$0:x","$0;}END{print x;}' > $new_file
但是这看起来像这样:
>aaa(+),AAAAAAAAAAA
>aaa(+),AAAAAAAAAAA,>bbb(+),BBBBBBBBBBBBBBBB
>aaa(+),AAAAAAAAAAA,>bbb(+),BBBBBBBBBBBBBBBB,>ccc(-),CCCCCCC
这显然不是我想要做的.
which is obviously not what I am trying to do.
任何帮助将不胜感激!
谢谢
推荐答案
此awk单行代码应适用于您的示例:
This awk one-liner should work for your example:
awk '/^>/{printf "%s,",$0;next}7' file
它将以>
开头的行与其下一行连接在一起.如果(+/-)
是键,则可以将模式更改为您感兴趣的键.
It joins the line beginning with >
with the line below it. If the (+/-)
is the key, you can change the pattern to your interested key.
这篇关于在比赛后使用awk联接线的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文