2013-08-27 3 views
0

여기에 질문이 있습니다. 귀하의 도움을 크게 주시면 감사하겠습니다.리눅스에서 grep 패턴 (반복 이상 n 개 이상)

다음과 같이 입력 파일이 있습니다 (1 열은 ID 이름, 2 열은 값 집합으로 구성됩니다). "NN"이 3 번 이상 발생하는 라인 만 표시 할 수 있습니까? 나는 grep 명령 (아마도 패턴 옵션을 사용하여)을 사용하여 수행 할 수있을 것이라고 생각하지만, 어떻게해야 할 지 알지 못합니다.

입력 파일 : 기능

ID_a NN;AT;AA;AC;NN 
ID_b NN;NN;NN;NN;NN 
ID_c NN;NN;AC;AC;NN 
ID_e NN;AG;NN;NN;AC 
ID_f AA;TT;CG;AA;TA 

원하는 출력 파일

ID_b NN;NN;NN;NN;NN 
ID_c NN;NN;AC;AC;NN 
ID_e NN;AG;NN;NN;AC 

답변

1

grep 'NN.*NN.*NN' < input.file

목록이

.*here는 문자의 수를 원하는만큼 반복을 의미하는 시대의. NN 사이의 내용과 일치합니다.

+0

덕분에 꽤 많이! 당신은 내 문제를 해결! =) – amine

+0

문제 없습니다. 도와 줘서 기뻐요! – dcaswell

+0

@amine 이것이 문제를 해결하면 답변을 수락하십시오. –

0

이 그것을 할 것입니다 :

grep -E '(NN.*){3,}' input.txt 

당신은 당신이 원하는 반복 최소한의 어떤 번호로 3를 대체 할 수 있습니다.

0
$ awk 'gsub(/NN/,"&")>=3' file 
ID_b NN;NN;NN;NN;NN 
ID_c NN;NN;AC;AC;NN 
ID_e NN;AG;NN;NN;AC 

또는 당신이 선호하는 경우 :

$ awk -F'NN' 'NF>=4' file 
ID_b NN;NN;NN;NN;NN 
ID_c NN;NN;AC;AC;NN 
ID_e NN;AG;NN;NN;AC