Нечеткий поиск / приблизительное сопоставление строк с помощью стандартных инструментов Unix

Я работаю с файлами аннотаций 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? Я не мог найти ответ до сих пор.

1 ответ

Решение

Если вы хотите истинный нечеткий поиск, определяемый метриками расстояния между строками, проверьте tre-agrep. Для вашего приложения я бы использовал grep с учетом регистра без учета регистра и специальных символов точки.

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

будет соответствовать любому символу в месте точек, и не обращать внимания на регистр, который является то, что вы хотите.

Другие вопросы по тегам