将三个文件的内容合并为一个

时间:2014-02-13 11:20:58

标签: awk

我有三个文件,如下所示。

a1.txt

>1BS3
MDEKRRAQH
>2ERT
>3a56
NEVE

a2.txt

>1BS3
QSKGGILS
>2ERT
INNWIV
>3a56
RRRRDK

a3.txt

>1BS3
>2ERT
PDSSM
>3a56
ILSKASDYIQELRQSNHR

我想将上述三个文件合并到另一个文件anew.txt中。我怎么能这样做?

期望的输出

>1BS3
MDEKRRAQHQSKGGILS
>2ERT
INNWIVPDSSM
>3a56
NEVERRRRDKILSKASDYIQELRQSNHR

我想按上述顺序获取输出。

3 个答案:

答案 0 :(得分:2)

这样的事情:

awk '/^>/{sel=$0;next}{a[sel]=a[sel]$0}END{for (i in a) print i RS a[i]}' a[123].txt

也就是说,如果第一个字符是“>”,则将记录选择器(我的“sel”变量)设置为当前行,并忽略其余的处理。如果该行不以“>”开头,则将当前行追加到当前选定的行。最后,打印出所有内容。

示例输出:

>3a56
NEVERRRRDKILSKASDYIQELRQSNHR
>1BS3
MDEKRRAQHQSKGGILS
>2ERT
INNWIVPDSSM

答案 1 :(得分:1)

这个awk程序维护键的顺序。它保持在数字索引数组中看到的键

awk '
    /^>/ {
        key = $0
        if (!(key in val)) {
            keys[++n] = key
            val[key] = ""
        }
        next
    } 
    { val[key] = val[key] $0 } 
    END {
        for (i=1; i<=n; i++) {
            print keys[i]
            print val[keys[i]]
        }
    }
' a{1,2,3}.txt
>1BS3
MDEKRRAQHQSKGGILS
>2ERT
INNWIVPDSSM
>3a56
NEVERRRRDKILSKASDYIQELRQSNHR

答案 2 :(得分:0)

awk应该:

awk '!/^>/ {a[s]=a[s] $0} {s=$0} END {for (i in a) print i RS a[i]}' a1 a2 a3
>2ERT
INNWIVPDSSM
>1BS3
MDEKRRAQHQSKGGILS
>3a56
NEVERRRRDKILSKASDYIQELRQSNHR