在比赛后使用awk联接线 [英] Using awk to join lines following a match

查看:44
本文介绍了在比赛后使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆