我有三个文件,如下所示。
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
我想按上述顺序获取输出。
答案 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