문자열을 포함하는 모든 줄 찾기 - 합계 및 계산

문자열을 포함하는 모든 줄 찾기 - 합계 및 계산

문자열을 포함하는 여러 하위 폴더에 많은 파일이 있습니다 type="abc_. 얼마나 많은 변형이 있는지 잘 모르겠습니다. 따라서 abc_내 파일에 알 수 없는 항목이 몇 번이나 나타나는지 알고 싶습니다.type="abc_

나는 다음을 포함하는 줄과 같은 것을 얻고 싶습니다.

"type="abc_0815 found 50 times
"type="abc_0816 found 32 times
...

and so on.

내가 이렇게 하면:

grep -rni 'type="abc_' * | wc

나는 그것이 14905 번 발생하는 것을 보았습니다 type="abc_.

누구든지 나를 도와줄 수 있나요?

답변1

find이는 파일 목록을 가져와서 전달 cat하고 출력을 구문 분석하는 데 사용됩니다 awk.

find . -type f |
xargs -I xx cat "xx" | awk '/type="abc_/{
  for(i=1;i<=NF;i++){
    if($i~/type="abc_/){ d[$i]++ } } } 
  END{ for(i in d){ print i"\tfound",d[i],"times." } }'

type="abc_4  found 1 times.
type="abc_3  found 2 times.
type="abc_6  found 1 times.
type="abc_2  found 2 times.
type="abc_10 found 3 times.
type="abc_5  found 1 times.

단순히 콘텐츠를 찾는 대신 찾기를 사용하므로 cat *콘텐츠 검색에 더 많은 유연성이 제공됩니다.

xargs .. cat | ..로 단축될 수 있다find . -type f -exec cat {} + | awk ..

답변2

-c플래그를 추가 하고 grep이 이를 계산하도록 하십시오.

0개의 결과가 너무 많으면 awk를 사용하여 필터링할 수 있습니다.

  grep -rnic 'type="abc_' * | awk -F: '$NF>0' 

답변3

다음과 같이 시도해 보세요.

grep -rni 'type="abc_' * |sed -n "s/.*\(abc_[0-9]*\).*/\1/p"|uniq -c| sed  "s/\(.*\)\(abc.*\)/\2 found \1 times/"

관련 정보