使用grep搜索DNA序列文件

时间:2012-09-19 18:25:10

标签: unix grep line-breaks dna-sequence

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

使用

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

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

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

返回

3:GGGCTTCGAGACGGCTGACGGCTGCCGTGGAGTCT
8:GGCGCCCTGAGGCGACGGCTCTCAGCCTCCGCCCC

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

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

2 个答案:

答案 0 :(得分:0)

我假设你的每一行都是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

答案 1 :(得分:0)

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