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

Unix 提取fasta文件中给定序列的序列头,unix,awk,sed,bioinformatics,fasta,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文件(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

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

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

>aat.2.d2344.acc
>aat.2.2344.acc
这可能适用于您(GNU-sed):


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

您可能对BioWork感兴趣,它是经过调整的awk版本,用于处理fasta文件

bioawk -c fastx -v str="ATTGCCGGTTTAATAAA" '($seq == str) { print ">"$name }' file.fasta
注意:基于中记录的。我不确定此版本是否与兼容。

使用grep和sed:

有关更多信息,请参见回答人。

使用Python! 创建一个名为extract_fasta.py的文件。在文件中插入以下内容:

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

for line in lines:
    if line[0] == '>':
        print(line[1:])
然后,打开终端并运行“python extract_fasta.py”

grep --no-group-separator -B 1 "ATTGCCGGTTTAATAAA" my.txt | sed -n 1~2p
>aat.2.d2344.acc
>aat.2.2344.acc
lines = open("myfasta.fasta").readlines()

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