工具
使用到的工具是:
- datasets
- jq
datasets
是NCBI官方的工具,可以直接调用NCBI的API进行信息的查询,返回的结果是json格式。现在还在活跃开发中,很多功能还不稳定还不确定,这也是我关注了这个程序这么久还没有写帖子的原因之一(另一个是因为懒,不然呢?叉腰.jpg)
jq
是一个用于在命令行中处理JSON(JavaScript对象表示法)数据的工具。可以用于解析、查询、过滤、修改和格式化JSON数据。
场景
我有一系列的物种的名称,我希望快速查询到这些物种的从family到species的信息,并且格式是用/作为分隔。
软件安装
可以用conda一条命令完成
conda install datasets jq
当然也可以直接下载二进制版
# datasets
wget -c https://ftp.ncbi.nlm.nih.gov/pub/datasets/command-line/LATEST/linux-amd64/datasets
# jq
wget -c https://packages.ubuntu.com/jq
# 其他版本/平台请查询:https://jqlang.github.io/jq/download/
运行
其实运行起来特别简单。
datasets summary taxonomy taxon "Yarrowia deformans" | jq -r '.reports[0].taxonomy.classification | [.class.name, .family.name, .genus.name, .species.name] | join("/")'
让gpt给解释一下:
datasets summary taxonomy taxon "Yarrowia deformans"
:
这部分命令通过NCBI的datasets工具获取关于“Yarrowia deformans”这个物种的分类学信息。datasets工具通常用于查询NCBI数据库中的生物数据。
| jq -r
:
这个部分使用管道(|)将前面命令的输出传递给jq,并使用-r选项告诉jq输出纯文本结果,而不是JSON格式的结果。
.reports[0].taxonomy.classification
:
这是jq的过滤器部分,表示从JSON输出中提取第一个报告(reports[0])的分类信息(taxonomy.classification)。
[.class.name, .family.name, .genus.name, .species.name]
:
这一步提取分类信息中的class(纲)、family(科)、genus(属)和species(种)的名称,并将它们组合成一个数组。
join("/")
:
这一步将前面提取的数组中的元素用斜杠(/)连接成一个字符串。例如,结果可能会是“Class/Family/Genus/Species”的形式。
最终,这段代码输出“Yarrowia deformans”的纲、科、属、种信息,并用斜杠分隔,作为一个单独的字符串。
封装成脚本
每次写这么长然后手动改物种太麻烦了,让GPT给我封装成脚本:
#!/usr/bin/env bash
species="$*"
if [ -z "${species}" ]; then
echo "Usage: bash $0 <species name>"
exit 1
fi
output=$(datasets summary taxonomy taxon "${species}" | jq -r '
if .reports[0].taxonomy.classification then
.reports[0].taxonomy.classification |
[.class.name, .family.name, .genus.name, .species.name] | join("/")
else
"Classification information not found for the given species."
end
')
if [ $? -ne 0 ]; then
echo "Error retrieving data. Please ensure that 'datasets' command is available and the species name is correct."
exit 1
fi
echo "$output"
在使用的时候就可以直接写
taxonmy.sh Yarrowia deformans
而不用写双引号之类的。
Saccharomycetes/Dipodascaceae/Yarrowia/Yarrowia deformans
之后只要写循环就能批量查询想要查的物种的taxonomy信息啦。
以后有机会再仔细介绍datasets这个命令的其他使用案例吧~
网友评论