이미 나와 비슷한 질문이 있지만 내 문제는 약간 다릅니다. 각 단어가 얼마나 많은 파일에 포함되어 있는지 확인하고 싶습니다. 파일에 단어가 있으면 카운터가 증가하고 다음 파일로 이동합니다. 각 파일에 해당 단어가 몇 번 나타나는지, 파일 이름에 해당 단어가 나타나는지 알고 싶지 않습니다. 단지 내 파일에서 발견된 파일 수를 표시하는 카운터일 뿐입니다. 예를 들어, 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