使用标准 unix 工具进行模糊搜索/近似字符串匹配

fuzzy search / approximate string matching with standard unix tools

我正在使用 prokka 注释文件,这些文件为我提供了在 uniprot 数据库中找到的基因的蛋白质产物。不幸的是,许多基因与多个非常相似的产品名称有关,例如

1%2C2-phenylacetyl-CoA epoxidase%2C subunit A
1%2C2 phenylacetyl-CoA epoxidase%2C subunit A
1%2C2-phenylacetyl CoA epoxidase%2C subunit A
1%2C2-Phenylacetyl CoA Epoxidase%2C subunit A

而这些变体实际上是不同的产品

1%2C2-phenylacetyl-CoA epoxidase%2C subunit A
1%2C2-phenylacetyl-CoA epoxidase%2C subunit B
1%2C2-phenylacetyl-CoA epoxidase%2C subunit C
1%2C2-phenylacetyl-CoA epoxidase%2C subunit E

为了避免在将我的基因映射到它们各自的产物时出现麻烦,我决定用“@”替换所有可能的歧义和有问题的字符,例如“-”“”“/”,并将所有字符串都变成小写。

但是有没有办法搜索,例如

1%2C2-Phenylacetyl CoA Epoxidase%2C subunit A

包括可能的、与标准 unix 工具密切相关的条目,如 grep?到目前为止我找不到答案。

如果您想要真正的模糊搜索,由字符串距离度量定义,请查看 tre-agrep。 对于您的应用程序,我会使用带有不区分大小写匹配和句点特殊字符的 grep。

grep -i "1.2C2.phenylacetyl.CoA.epoxidase.2C subunit A" drugNames.txt

会匹配句点处的任意字符,不区分大小写,这就是你想要的。