파일 목록에 단어가 있는지 확인하고 해당 단어가 몇 개의 파일에 있는지 출력하는 명령

파일 목록에 단어가 있는지 확인하고 해당 단어가 몇 개의 파일에 있는지 출력하는 명령

이미 나와 비슷한 질문이 있지만 내 문제는 약간 다릅니다. 각 단어가 얼마나 많은 파일에 포함되어 있는지 확인하고 싶습니다. 파일에 단어가 있으면 카운터가 증가하고 다음 파일로 이동합니다. 각 파일에 해당 단어가 몇 번 나타나는지, 파일 이름에 해당 단어가 나타나는지 알고 싶지 않습니다. 단지 내 파일에서 발견된 파일 수를 표시하는 카운터일 뿐입니다. 예를 들어, 10개의 파일이 있는 디렉토리가 있고 각 파일은 레시피이며 "salt"라는 단어가 포함된 파일 수를 확인하고 싶습니다. 명령을 실행하면 다음과 유사한 내용이 출력됩니다.소금 9개. 이는 10개의 파일 중 9개에서 발견된다는 의미입니다. 하지만 나는 모든 단어가 그렇게되기를 바랍니다. 지금까지 나는 이것을 가지고 있습니다 :

 grep -l *| tr '[A-Z]' '[a-z]' | tr -d '[:punct:]' | tr ' ' '\n' | sort | uniq | wc -l

어떤 도움이라도 대단히 감사하겠습니다.

답변1

레시피 폴더가 있다고 가정/홈/사용자 이름/레시피

다음은 간단한 스크립트입니다:

#!/bin/bash

count=0
dir=/home/username/recipes/
for recipe in $(ls $dir); do
  if [ $(cat $HOME/recipes/$recipe | grep $1) ]; then
   ((count++))
  fi
done
echo "$count $1"

파일을 저장한 후 실행 가능하게 만들어야 합니다. 이 작업을 수행:

chmod 740 script.sh

실행할 때 다음과 같이 찾고 있는 매개변수를 포함하세요.

./script.sh salt

두 파일 모두에 일치하는 항목이 있으면 다음이 출력됩니다.

2 salt

세 개의 파일에 일치하는 항목이 있으면 다음이 출력됩니다.

3 salt

등.

답변2

사용grep -c

예를 들어

kaustubh@hacked:~/test$ cat a
salt
salt
salt
salt
salt

kaustubh@hacked:~/test$ cat b
here sis salt
their is salt
and everywhere is salt

kaustubh@hacked:~/test$ cat c
salt hash
hash salt
sweet salt

kaustubh@hacked:~/test$ cat d
this is line salt

salt이제 파일의 단어 수를 원합니다.grep -c salt *

kaustubh@hacked:~/test$ grep -c  salt *
a:5
b:3
c:3
d:1

관련 정보