我有一个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
答案 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”。