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

标签 search awk bioinformatics multiline fasta

我想从 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 方法 herehere ,但是那里给出的代码对于我给出的例子仍然不能完美地工作。原因如下:

(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 变量,但到目前为止我所有的尝试都失败了。请问有人可以帮我吗?

最佳答案

$ 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

关于search - 使用awk通过文件中的ID从multifasta文件中提取序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49731386/

相关文章:

search - 如何防止 robots.txt 从暂存环境传递到生产环境?

linux - 移动并删除文件夹中所有匹配 grep 的文件

python - 合并数据框的两列,然后进行比较

string - R:如何根据规范更改数据框中的列名

php - php文章搜索引擎

algorithm - 结构化数据的模糊匹配

search - 如何在 Google 图书中按出版日期的倒序​​对搜索结果进行排序?

python - 如果这个 python 脚本在 linux 上,我怎样才能得到一个值?

linux - 删除一些不需要的行

python - 如何将 CRAFT 语料库中的 XML NER 数据转换为 spaCy 的 JSON 格式?