정규 표현식을 위한 awk 및 egrep

정규 표현식을 위한 awk 및 egrep

저는 유닉스를 처음 접했습니다!

fastq 파일에서 3개 이상의 As가 연속으로 포함된 읽기 수는 몇 개입니까?

egrep 'A{3}'를 사용하여 AAA가 몇 개인지 알려줍니다. 하지만 지금은 AAA 연속 3개 이상을 알고 싶습니다. 그러나 >=는 작동하지 않습니다. 이것을 결정하는 데 awk를 사용할 수 있습니까?

또한 정규식을 사용하여 4개 이상의 A 뒤에 T 이외의 항목이 있는 읽기 수를 확인하려면 어떻게 해야 합니까? (GC 또는 A) 따라서 A는 >= 4여야 하고 그 다음에는 GCorA가 되어야 합니다.

편집: 연속으로 3A라고 말하면 다음과 같은 의미입니다. GGCTAAAAAACGGAT

답변1

3개 이상이면 다음을 a사용할 수 있습니다 a{3,}. 예를 들어:

$ echo a | grep -E 'a{3,}'
$ echo aa | grep -E 'a{3,}'
$ echo aaa | grep -E 'a{3,}'
aaa
$ echo aaaa | grep -E 'a{3,}'
aaaa
$ echo aaaaaaaaaa | grep -E 'a{3,}'
aaaaaaaaaa

3개 이상의 as 다음에 a가 아닌 항목이 오는 경우 다음과 같이 t사용할 수 있습니다 .a{3,}[^t]

$ echo aaa | grep -E 'a{3,}[^t]'
$ echo aaat | grep -E 'a{3,}[^t]'
$ echo aaax | grep -E 'a{3,}[^t]'
aaax

그러나 an은 aa가 아니므 t로 'aaaa'와 같은 항목과 일치하며 그 a뒤에는 a가 아닌 문자가 옵니다 t(이 경우 a).

$ echo aaaa | grep -E 'a{3,}[^t]'
aaaa

a문자열이 is도 아니고 is도 아닌 것으로 끝나도록 하려면 다음을 t사용할 수 있습니다 a{3,}[^at]. 예를 들어:

$ echo aaaa | grep -E 'a{3,}[^ta]'
$ echo aaaaaaaa | grep -E 'a{3,}[^ta]'
$ echo aaaaaaaattt | grep -E 'a{3,}[^ta]'
$ echo aaaaaaaab | grep -E 'a{3,}[^ta]'
aaaaaaaab

답변2

세 개 이상의 시퀀스 수를 인쇄하려면 A다음을 시도하십시오.

awk '{print gsub (/AAAA*/, "&")}' file
3
4
4
1

두 번째 요청의 경우 위의 내용을 수정하세요.

awk '{print gsub (/AAAAA*[CG]/, "&")}' file

"Followed by A"는 A* 패턴으로 재정의되었습니다.

답변3

fastq 파일에서 3개 이상의 As가 연속으로 포함된 읽기는 몇 개입니까?

fastq 형식 파일이므로 정확한 개수를 얻으려면 모든 행이 아닌 실제 시퀀스 행만 보아야 합니다. 변수를 사용하여 각 4줄 시퀀스 블록의 두 번째 줄로 일치를 제한하면 NR이를 달성 할 수 있습니다.

awk 'NR%4 == 2 && /AAA/ { count++ } END { print count+0 }' foo.fastq

4개 이상의 A와 T 이외의 항목이 뒤따르는 읽기가 몇 번이나 실행되었습니까? (GC 또는 A)

awk 'NR%4 == 2 && /AAAA([^T]|$)/ { count++ } END { print count+0 }' foo.fastq

AAAAAT( 4개의 A와 그 뒤에 또 다른 A가 있으므로 일치합니다 .)

관련 정보