在fasta文件中提取给定序列的序列头

时间:2018-10-18 20:31:58

标签: unix awk sed bioinformatics fasta

我有一个fasta文件(myfasta.fasta),如下所示:

>aat.2.2344.a
ATTGCCGGTTTAATATTA
>aat.2.d2344.acc
ATTGCCGGTTTAATAAA
>aat.2.2bb344.a
ATTGCCGGTTTAATAGGAGAGAATT
>aat.2.2ccc344.a
ATTGCCGGTTTAATAGGGAG
>aat.2.2344.acc
ATTGCCGGTTTAATAAA

我还有一个文本文件my.txt,其中包含与上述fasta文件中的序列匹配的序列:

ATTGCCGGTTTAATAAA

基于此序列,我要提取此序列的所有匹配ID。有人可以帮我吗?谢谢!

我想要的结果是:

>aat.2.2344.acc
>aat.2.d2344.acc

5 个答案:

答案 0 :(得分:2)

假设您输入的数据格式与示例一致

$ awk -v v='ATTGCCGGTTTAATAAA' '/>/{id=$0} $1==v{print id}' file

>aat.2.d2344.acc
>aat.2.2344.acc

答案 1 :(得分:2)

您可能对bioawk感兴趣,它是awk的改编版本,已调整为可处理fasta文件

bioawk -c fastx -v str="ATTGCCGGTTTAATAAA" '($seq == str) { print ">"$name }' file.fasta

注意:BioAwk基于Brian Kernighan's awk中记录的"The AWK Programming Language", by Al Aho, Brian Kernighan, and Peter Weinberger (Addison-Wesley, 1988, ISBN 0-201-07981-X) 。我不确定该版本是否与POSIX兼容。

答案 2 :(得分:2)

使用 grep sed

grep --no-group-separator -B 1 "ATTGCCGGTTTAATAAA" my.txt | sed -n 1~2p
>aat.2.d2344.acc
>aat.2.2344.acc

有关更多信息,请参见@QuoraFeans的答案。

答案 3 :(得分:1)

这可能对您有用(GNU sed):

sed 's|.*|/^&$/{x;p}|' keyFile | sed -n -e 'h;n' -f - fastaFile

从密钥文件创建sed脚本,然后对fasta文件运行它。

答案 4 :(得分:0)

使用Python! 创建一个名为extract_fasta.py的文件。将此插入文件:

lines = open("myfasta.fasta").readlines()

for line in lines:
    if line[0] == '>':
        print(line[1:])

然后,打开终端并运行“ python extract_fasta.py”。