温馨提示:本文翻译自stackoverflow.com,查看原文请点击:search - extract sequences from multifasta file by ID in file using awk
awk bioinformatics multiline search fasta

search - 使用awk通过文件中的ID从multifasta文件中提取序列

发布于 2020-04-12 11:54:18

我想从multifasta文件中提取与ID的单独列表匹配的ID序列。

FASTA文件seq.fasta:

>7P58X:01332:11636
TTCAGCAAGCCGAGTCCTGCGTCGTTACTTCGCTT
CAAGTCCCTGTTCGGGCGCC
>7P58X:01334:11605
TTCAGCAAGCCGAGTCCTGCGTCGAGAGTTCAAGTC
CCTGTTCGGGCGCCACTGCTAG
>7P58X:01334:11613
ACGAGTGCGTCAGACCCTTTTAGTCAGTGTGGAAAC
>7P58X:01334:11635
TTCAGCAAGCCGAGTCCTGCGTCGAGAGATCGCTTT
CAAGTCCCTGTTCGGGCGCCACTGCGGGTCTGTGTC
GAGCG
>7P58X:01336:11621
ACGCTCGACACAGACCTTTAGTCAGTGTGGAAATCT
CTAGCAGTAGAGGAGATCTCCTCGACGCAGGACT

ID文件id.txt:

7P58X:01332:11636
7P58X:01334:11613

我想获取仅具有与id.txt文件中的ID匹配的序列的fasta文件:

>7P58X:01332:11636
TTCAGCAAGCCGAGTCCTGCGTCGTTACTTCGCTTT
CAAGTCCCTGTTCGGGCGCC
>7P58X:01334:11613
ACGAGTGCGTCAGACCCTTTTAGTCAGTGTGGAAAC

我真的很喜欢在这里这里的答案中找到的awk方法,但是那里给出的代码对于我给出的示例仍然无法完美运行。原因如下:

(1)

awk -v seq="7P58X:01332:11636" -v RS='>' '$1 == seq {print RS $0}' seq.fasta

该代码对于多行序列效果很好,但是ID必须单独插入到代码中。

(2)

awk 'NR==FNR{n[">"$0];next} f{print f ORS $0;f=""} $0 in n{f=$0}' id.txt seq.fasta

此代码可以从id.txt文件中获取ID,但仅返回多行序列的第一行。

我想这很不错,那就是修改代码(2)中的RS变量,但是到目前为止,我的所有尝试都失败了。有人可以帮我吗?

查看更多

提问者
Dalibor Miklík
被浏览
52
Ed Morton 2018-04-10 00:47
$ awk -F'>' 'NR==FNR{ids[$0]; next} NF>1{f=($2 in ids)} f' id.txt seq.fasta
>7P58X:01332:11636
TTCAGCAAGCCGAGTCCTGCGTCGTTACTTCGCTT
CAAGTCCCTGTTCGGGCGCC
>7P58X:01334:11613
ACGAGTGCGTCAGACCCTTTTAGTCAGTGTGGAAAC