find 명령을 사용하여 텍스트 및 파일의 총 발생 횟수를 찾는 방법

find 명령을 사용하여 텍스트 및 파일의 총 발생 횟수를 찾는 방법

find특정 텍스트 문자열의 총 발생 횟수와 해당 텍스트 문자열이 포함된 파일 수를 찾는 명령을 실행하려고 합니다 .

지금 내가 가지고 있는 것은 이 명령입니다.

find . -name "*.txt" | xargs grep -i "abc"

"abc"라는 텍스트가 포함된 모든 "*.txt" 파일을 보고합니다. 하나 또는 두 개의 찾기 명령을 가져오고 싶습니다.

  1. abc의 총 발생 횟수
  2. abc를 포함하는 총 파일 수입니다.

답변1

질문 1의 경우 다음과 같이 할 수 있습니다.

find . -name "*.txt" | xargs grep -i "abc" | wc -l

총 일치 횟수를 계산합니다.알파벳모든 텍스트 파일에서.

질문 2의 경우 다음과 같이 생각해 냈습니다.

find . -name "*.txt" -exec grep -i "abc" {} + | cut -d: -f1 | sort | uniq | wc -l

이는 일치 목록에서 고유한 파일 이름을 가져와서 개수를 셉니다(정렬이 필요하지 않을 수 있음).


Miracle173이 지적했듯이 grep"파일당 한 번 일치" 플래그를 사용하면 명령을 다음과 같이 단축할 수 있습니다.

find . -name "*.txt" -exec grep -il "abc" {} + | wc -l

답변2

grep의 -c옵션이 필요한 것입니다

find . -name \*txt | xargs grep -c -i "abc" | {
    total=0
    count=0 
    while IFS=: read name num; do 
        ((num > 0)) && ((count+=1))
        ((total+=num))
    done
    echo total=$total 
    echo count=$count
}

while하위 쉘의 범위 내에서 변수를 유지하기 위해 루프 주위에서 명령을 그룹화하려면 중괄호가 필요합니다 .

답변3

$ grep -R --include='*.txt' -c -i abc . | awk -F: ' 
           BEGIN {
                    totalCount=0;noOfFiles=0;
                 } 
                 { totalCount=totalCount+$2; 
                   if ( $2 > 0 ) 
                   {
                       noOfFiles+=1;
                   } 
                 } 
            END {
             print "Total number of times abc appears:"totalCount; 
             print "Total number of files which has abc in it:"noOfFiles
            } '

(또는)

ls 출력은 다른 프로그램에서 구문 분석되어서는 안 됩니다. 아래 댓글을 참조하세요.

$  ls -Rltr | awk '/.txt/{print $NF }' | xargs grep -c -i "abc" | awk -F: ' 
       BEGIN {
                totalCount=0;noOfFiles=0;
             } 
             { totalCount=totalCount+$2; 
               if ( $2 > 0 ) 
               {
                   noOfFiles+=1;
               } 
             } 
        END {
         print "Total number of times abc appears:"totalCount; 
         print "Total number of files which has abc in it:"noOfFiles
        } '


Result:
Total number of times abc appears:0
Total number of files which has abc in it:0

답변4

파일에 포함된 abc 수:

.txt 파일에 있는 모든 "abc"의 수를 계산하려면 grep -c를 사용하고 cat을 찾아 제외하세요.

find . -name "*.txt" -exec cat {} + | grep -ic abc

Grep -c가 총계를 계산합니다. IMHO에 대한 불합리한 호출이 포함된 SigueSigueBen의 답변에서 이 답변을 찾지 못했습니다 xargs. 다른 두 사람은 내가 갈망했던 곳에 대답했습니다. 나는 그것들을 연구한 적도 없고, 나 자신도 그런 글을 쓰지 않을 것입니다.

abc를 포함하는 파일 수:

find . -name "*.txt" -exec grep -iq abc {} ";" -printf "1" | wc -c 

이름에 개행 문자가 포함된 파일 이름(제가 인정하는 경우는 드뭅니다)(완전히 합법적임)에 대해서는 이 작업이 실패하지 않습니다.

관련 정보