Нечеткий поиск / приблизительное сопоставление строк с помощью стандартных инструментов 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
будет соответствовать любому символу в месте точек, и не обращать внимания на регистр, который является то, что вы хотите.