【问题标题】: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 之类的东西,它们就会匹配。

非常感谢

【问题讨论】:

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

标签: bash grep


【解决方案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

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

这能解决你的问题吗?

【讨论】:

    猜你喜欢
    • 2014-04-09
    • 2021-07-07
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    相关资源
    最近更新 更多