Você pode fazer uma iteração em uma lista de arquivos fornecidos na linha de comando da seguinte forma:
for file in "$@"
do
echo "Considering file ==> $file <=="
done
Seu método para correspondência de palavras deve ser perfeitamente eficaz. Você também pode procurar por ocorrências de uma palavra usando grep -o
echo 'I can cry cryogenic tears when I scry my hands. Can you cry too?' |
grep -o '\bcry\b' # \b marks a word boundary
Pipar o resultado disso em wc -l
fornecerá o número de ocorrências no fluxo de entrada.
Usar $( ... )
permite interpolar a saída de um comando no texto usado por outro. Por exemplo
echo "The date and time right now is $(date)"
Precisamos de algum trabalho extra para evitar pesquisar o primeiro arquivo, mas usando isso como a lista de palavras. Mas juntando isso, você pode acabar assim:
wordfile="$1"
wordlist=($(cat "$wordfile"))
shift
for file in "$@"
do
for word in "${wordlist[@]}"
do
# echo "$file: $word:" $(grep -o "\b${word}\b" "$file" | wc -l) # My way
echo "$file: $word:" $(tr ' ' '\n' <"$file" | grep -c "$word") # Your way
done
done
Não é muito eficiente porque, para N palavras, ele pesquisará cada arquivo N vezes. Você pode achar que grep -f
é de ajuda aqui.