2011-09-22 2 views
1

파일 목록에서 특정 패턴이 일치하는 횟수를 계산하는 bash 스크립트를 작성하려고합니다.여러 파일에서 특정 정규 표현식의 발생 횟수를 카운트

나는 해결책을 찾기 위해 봤지만 단 하나의 파일에 대한 해결책을 찾았습니다.

내가 egrep -o PATTERN file을 사용할 수 있다는 것을 알고 있지만 어떻게 파일 목록에 총괄하여 최종화 할 수 있습니까?

편집 : 나는 쓰기를 시도하고있는 스크립트를 추가 :

#! /bin/bash 

egrep -o -c "\s*assert.*;" $1 | awk -F: '{sum+=$2} END{print sum}' 

명령 행에 egrep을 직접 실행 잘 작동하지만, bash는 스크립트 내에서하지 않습니다. RegEx를 특별히 보호해야합니까?

+0

이 요구 사항은 사용자가 명시 적으로 수행해야 할 정도로 충분히 두려울 것입니다. – TMS

답변

4

당신은 수, 예를 정리해 각 파일 내에서 일치를 계산 한 다음 마지막에 awk를 사용하는 grep -c을 사용할 수

grep -c PATTERN * | awk -F: '{sum+=$2} END{print sum}' 
+0

나는 'awk'을 한번도 사용해 본 적이 없지만 멋진 곳으로 보인다. 이것을 bash 스크립트에 넣고 싶지만 작동하지 않습니다. 항상 '0'을 반환합니다. 위의 스크립트를보십시오. –

+0

@TiagoVeloso :'grep -c PATTERN *'이 출력하는 것은 무엇입니까? 그것은 입력 파일 당 한 줄인'file : count'이어야합니다. – NPE

+0

그런 식으로 작업하고 있는데, 문제는 스크립트 파일에 명령을 넣을 때만 발생합니다. –

3
grep -o <pattern> file1 [file2 .. | *] | 
    uniq -c 

만 총하려는 경우 :

grep -o <pattern> file1 [file2 .. | *] | wc -l 

편집 : 정렬이 필요없는 것 같습니다.

+1

+1. 물 옷장 유틸리티 바위 :) –

1

허용되는 대답은 grep이 한 줄에 두 번 이상 나타날 수 있지만 grep은 1로 간주됩니다. 게다가, 한 명령이 그 일을 수행합니다.

awk 'BEGIN{RS="\0777";FS="PATTERN"} { print NF-1 } ' file 
관련 문제