1

Unixのgrepを使用して、ファイル内の特定のシーケンスを検索しようとしています。ファイルは通常、「A」、「T」、「C」、および「G」の非常に大きい(〜1Gb)です。これらのファイルはまた、多くの行にまたがっており、各行は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

したがって、ここでの私の問題は、2行目の終わりと3行目の始まりにまたがるがgrep見つからないことです。GACGGCT

grepを使用して、文字列の任意のポイントに改行が含まれる場合と含まれない場合があるターゲットシーケンスを検索するにはどうすればよいですか?grepまたは、ターゲット文字列の改行を無視するように指示するにはどうすればよいですか?これを行う簡単な方法はありますか?

4

2 に答える 2

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
于 2012-09-20T06:31:24.693 に答える
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
于 2013-08-02T13:15:28.243 に答える