2012-09-19 3 views
1

Unix의 grep을 사용하여 파일 내의 특정 시퀀스를 검색하려고합니다. 파일은 대개 A, T, C 및 G의 매우 큰 (~ 1Gb) 파일입니다. 이 파일은 또한 많은 행을 포함하며 각 행은 60 자의 단어입니다. 내가 가지고있는 문제는 이러한 파일 내에서 특정 시퀀스를 검색 할 때 grep은 한 줄에 나타나는 패턴에 대한 결과를 반환하지만 패턴이 줄 (중간에 줄 바꿈이 있음)이 아닌 경우 결과를 반환한다는 것입니다. 예를 들어 :grep을 사용하여 DNA 시퀀스 파일 검색

(나는 두 별의 대상 'GACGGCT의를 넣어) 파일 grep3.txt 검색

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

반환

3:GGGCTTCGAGACGGCTGACGGCTGCCGTGGAGTCT 
8:GGCGCCCTGAGGCGACGGCTCTCAGCCTCCGCCCC 

그래서 위해

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

를 사용하여, 내 문제는 여기서 grep은 라인 2의 끝 부분에있는 GACGGCT을 찾지 못합니다.

grep을 사용하여 문자열의 어느 지점에서 줄 바꿈을 포함 할 수도 있고 포함하지 않을 수도있는 대상 시퀀스를 어떻게 찾을 수 있습니까? 또는 grep에 대상 문자열에서 줄 바꿈을 무시한다고 어떻게 말할 수 있습니까? 이 작업을 수행하는 간단한 방법이 있습니까?

+2

가 어떻게 시퀀스가 ​​시작 위치를 알고 중지합니까? 예를 들어 시퀀스는 40 문자 만이어서 40 문자 시퀀스 이후에 나눌 수 있습니다. 줄 바꿈을 무시하면 grep은 전체 파일을 단일 찾은 항목으로 반환합니다. 위의 설명에 +1에 –

+0

+1; 또한,'grep' 결과는 시퀀스의 무작위 부분을 나타 내기 때문에 (전체 파일이 단일 시퀀스가 ​​아닌 한) 무의미한 것처럼 보입니다. –

+1

파일에 단일 문자열이 들어있는 경우 \ n을 제거하여 행을 결합 할 수 있습니다. 예를 들어'tr -d '\\ n'< inputfile > tempfile' – wildplasser

답변

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 
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