提取 fasta 文件中给定序列的序列头
Extract sequence header for a given sequence in fasta file
我有一个像这样的 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=[=10=]} ==v{print id}' file
>aat.2.d2344.acc
>aat.2.2344.acc
这可能对你有用 (GNU sed):
sed 's|.*|/^&$/{x;p}|' keyFile | sed -n -e 'h;n' -f - fastaFile
从密钥文件创建一个 sed 脚本并运行它针对 fasta 文件。
您可能对 bioawk 感兴趣,它是 awk 的改编版本,可以处理 fasta 文件
bioawk -c fastx -v str="ATTGCCGGTTTAATAAA" '($seq == str) { print ">"$name }' file.fasta
注意: BioAwk is based on Brian Kernighan's awk 记录在 "The AWK Programming Language",
作者:Al Aho、Brian Kernighan 和 Peter Weinberger
(Addison-Wesley, 1988, ISBN 0-201-07981-X)
。我不确定这个版本是否与 POSIX.
兼容
使用 grep 和 sed:
grep --no-group-separator -B 1 "ATTGCCGGTTTAATAAA" my.txt | sed -n 1~2p
>aat.2.d2344.acc
>aat.2.2344.acc
有关详细信息,请参阅 @QuoraFeans 的回答。
使用Python!
创建一个名为 extract_fasta.py 的文件。在文件中插入:
lines = open("myfasta.fasta").readlines()
for line in lines:
if line[0] == '>':
print(line[1:])
然后,打开终端并运行 "python extract_fasta.py"。
我有一个像这样的 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=[=10=]} ==v{print id}' file
>aat.2.d2344.acc
>aat.2.2344.acc
这可能对你有用 (GNU sed):
sed 's|.*|/^&$/{x;p}|' keyFile | sed -n -e 'h;n' -f - fastaFile
从密钥文件创建一个 sed 脚本并运行它针对 fasta 文件。
您可能对 bioawk 感兴趣,它是 awk 的改编版本,可以处理 fasta 文件
bioawk -c fastx -v str="ATTGCCGGTTTAATAAA" '($seq == str) { print ">"$name }' file.fasta
注意: BioAwk is based on Brian Kernighan's awk 记录在 "The AWK Programming Language", 作者:Al Aho、Brian Kernighan 和 Peter Weinberger (Addison-Wesley, 1988, ISBN 0-201-07981-X) 。我不确定这个版本是否与 POSIX.
兼容使用 grep 和 sed:
grep --no-group-separator -B 1 "ATTGCCGGTTTAATAAA" my.txt | sed -n 1~2p
>aat.2.d2344.acc
>aat.2.2344.acc
有关详细信息,请参阅 @QuoraFeans 的回答。
使用Python! 创建一个名为 extract_fasta.py 的文件。在文件中插入:
lines = open("myfasta.fasta").readlines()
for line in lines:
if line[0] == '>':
print(line[1:])
然后,打开终端并运行 "python extract_fasta.py"。