【问题标题】:Using grep to search DNA sequence files使用 grep 搜索 DNA 序列文件
【发布时间】:2012-09-12 02:42:18
【问题描述】:

我正在尝试使用 Unix 的 grep 来搜索文件中的特定序列。这些文件通常非常大 (~1Gb),有 'A's、'T's、'C's 和 'G's。这些文件也跨越了很多行,每行都是一个 60ish 字符的单词。我遇到的问题是,当我在这些文件中搜索特定序列时,grep 将返回单行上出现的模式的结果,但如果模式跨越一行(中间某处有换行符)则不会。例如:

使用

$ grep -i -n "GACGGCT" grep3.txt 

搜索文件grep3.txt(我把目标'GACGGCT's放在双星中)

GGGCTTCGA**GACGGCT**GACGGCTGCCGTGGAGTCT
CCAGACCTGGCCCTCCCTGGCAGGAGGAGCCTG**GA
CGGCT**AGGTGAGAGCCAGCTCCAAGGCCTCTGGGC
CACCAGGCCAGCTCAGGCCACCCCTTCCCCAGTCA
CCCCCCAAGAGGTGCCCCAGACAGAGCAGGGGCCA
GGCGCCCTGAGGC**GACGGCT**CTCAGCCTCCGCCCC

返回

3:GGGCTTCGAGACGGCTGACGGCTGCCGTGGAGTCT
8:GGCGCCCTGAGGCGACGGCTCTCAGCCTCCGCCCC

所以,我的问题是 grep 没有找到跨越第 2 行末尾和第 3 行开头的 GACGGCT

如何使用 grep 查找在字符串中的任何位置可能包含或不包含换行符的目标序列?或者我如何告诉grep 忽略目标字符串中的换行符?有没有简单的方法来做到这一点?

【问题讨论】:

  • 你怎么知道序列在哪里开始和停止?例如,一个序列可以只有 40 个字符,然后在 40 个字符序列之后中断。如果你忽略换行符,那么 grep 只会将整个文件作为一个找到的条目返回。
  • 如果文件包含单个字符串,您可以通过删除 \n 来合并行,例如使用 tr -d '\\n' < inputfile >tempfile
  • 我不想更改文件,也不想创建没有换行符的新文件。我已经有数百个文件占用了 TB 的磁盘空间,复制它们是不值得的,更改它们会使大多数程序无法使用它们。我认为 shellter 和 NuclearGhost 已经从他们的描述中清楚地表明(grep、sed、awk)是/不是我完成这项工作所需的工具......话虽如此,有人知道 unix 终端控制吗数据挖掘工具?
  • 更准确地说,我想计算一个特定序列在文件中出现的次数,并且我希望该工具的行为就像文件中没有换行符一样(即使有是换行符);就好像连续的行被连接起来,整个文件在一行上。
  • stackoverflow.com/a/8713849/905902 这是链接。 IIRC,flex 能够用用户提供的函数替换 getc(),在您的情况下,该函数可用于跳过嵌入的换行符(并增加行计数器)

标签: unix grep line-breaks dna-sequence


【解决方案1】:

我假设你的每一行都是 60 字符长。那么下面的cmd应该可以工作了

tr '\n' ' ' < grep3.txt | sed -e 's/ //g' -e 's/.\{60\}/&^/g' | tr '^' '\n' | grep -i -n "GACGGCT"

输出:

1:GGGCTTCGA**GACGGCT**GACGGCTGCCGTGGAGTCTCCAGACCTGGCCCTCCCTGGC
2:AGGAGGAGCCTG**GACGGCT**AGGTGAGAGCCAGCTCCAAGGCCTCTGGGCCACCAGG
4:CCAGGCGCCCTGAGGC**GACGGCT**CTCAGCCTCCGCCCC

【讨论】:

    【解决方案2】:
    pcregrep -nM "G[\n]?A[\n]?C[\n]?G[\n]?G[\n]?C[\n]?T" grep3.txt
    1:GGGCTTCGAGACGGCTGACGGCTGCCGTGGAGTCT
    2:CCAGACCTGGCCCTCCCTGGCAGGAGGAGCCTGGA
    CGGCTAGGTGAGAGCCAGCTCCAAGGCCTCTGGGC
    6:GGCGCCCTGAGGCGACGGCTCTCAGCCTCCGCCCC
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-15
      • 2019-08-25
      • 2022-01-13
      • 2020-12-08
      • 1970-01-01
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      相关资源
      最近更新 更多