查找文件中允许一个不匹配的单词之间的匹配项

Posted

技术标签:

【中文标题】查找文件中允许一个不匹配的单词之间的匹配项【英文标题】:Finding matches between words in file allowing one mismatch 【发布时间】:2022-01-07 23:11:10 【问题描述】:

我试图在一个文件中找到匹配的单词,允许单词之间存在一个不匹配,我将文件的一部分和我想要获得的预期输出放在这里。

我要解析的文件是这样的:

CTAGGA
TTAGCT
CGTACA
ACAGTG
ACACTG

而我想要得到的输出是这样的:

CTAGGA: CTAGGA
TTAGCT: TTAGCT
CGTACA: CGTACA
ACAGTG: ACAGTG, ACACTG
ACACTG: ACAGTG, ACACTG

输出不需要完全像这样,但可以理解哪些单词有 AGGAC 之类的东西,它们就会匹配。

非常感谢

【问题讨论】:

请添加您尝试过的代码作为您在问题中的努力。在堆栈溢出、欢呼和快乐学习中强烈鼓励提及有问题的努力。 了解Hamming distance 请明确定义什么是不匹配。您的描述模棱两可,有点令人困惑;) 【参考方案1】:

让我们通过解决子问题逐步构建解决方案。

问题一: Levenhstein 距离(编辑距离)。 agrep 是内置的。

agrep -1 "ACATTG" dna.file

问题2:逐行读取文件

#!/bin/bash 
#pass file as argument

while IFS='' read -r LINE || [ -n "$LINE" ]; do
    echo "processing line: $LINE"
done < $1

致电:./script.sh &lt;absolutepathtoyourgenomefile&gt;

问题 3: 将其组合在一起并构建输出。

#!/bin/bash 
#pass file as argument

file=$1

while IFS='' read -r LINE || [ -n "$LINE" ]; do
    echo "$LINE:" $(agrep -1 "$LINE" $file)
done < $file

示例:

输入文件/tmp/genome.txt

CTAGGA
TTAGCT
CGTACA
ACAGTG
ACACTG
TCAGGA
TTAAGG
TTGGAA
TTAGCA
TTGGAA
TTAGGA

运行脚本:

$ ./script.sh /tmp/genome.txt 

CTAGGA: CTAGGA TCAGGA TTAGGA
TTAGCT: TTAGCT TTAGCA
CGTACA: CGTACA
ACAGTG: ACAGTG ACACTG
ACACTG: ACAGTG ACACTG
TCAGGA: CTAGGA TCAGGA TTAGGA
TTAAGG: TTAAGG TTAGGA
TTGGAA: TTGGAA TTGGAA
TTAGCA: TTAGCT TTAGCA TTAGGA
TTGGAA: TTGGAA TTGGAA
TTAGGA: CTAGGA TCAGGA TTGGAA TTAGCA TTGGAA TTAGGA

请注意,“一个不匹配”是高度模棱两可的。您使用什么指标来定义什么是“一个”不匹配?

这能解决你的问题吗?

【讨论】:

以上是关于查找文件中允许一个不匹配的单词之间的匹配项的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Studio Code 中查找和替换所有匹配项(在所有文件中)?

我们如何在匹配两个文本文件时查找和替换单词?

在 HTML 标记的文本内容中查找单词/文本并用突出显示标记替换匹配项的可靠方法是啥?

SSIS 查找在 varchar 字段上找不到匹配项

javascript 能够扫描文本并查找单词之间的匹配点,以提取语法

查找输入字符串和一组固定字符串之间的匹配项