Como eu procuro um diretório de arquivos de dados e imprimo quantas vezes uma determinada palavra aparece em cada arquivo?

1

Isto é o que eu tenho atualmente, no entanto, ele imprime o número total de vezes Autor aparece em todos os arquivos: 128367

grep -roh 'Author' $1 | wc -w

No entanto, como imprimo a contagem de palavras para cada arquivo separadamente?

Também o argumento que está tomando é uma pasta com os arquivos.

    
por tom 07.02.2016 / 18:05

3 respostas

1

Você só poderia usar grep para fazer isso. O segundo grep é filtrar arquivos sem correspondência.

grep -rc 'Author' ${1} | grep -v ':0$'
    
por 07.02.2016 / 18:34
0

Repasse os arquivos:

for file in "$1"/* ; do
    if [[ -f "$file ]] ; then
        printf %s: "$file"
        grep -o Author "$file" | wc -w
    fi
done

Você também pode usar o Perl:

perl -lne 'BEGIN { $c = 0 }
           $c++ while /Author/g;
           if (eof) { print "$ARGV: $c"; $c=0 }
          ' "$1"/*
    
por 07.02.2016 / 18:30
0

Com o GNU Parallel:

parallel --tag 'grep -oh Author {} | wc -w' ::: *.dat

Se houver subdiretórios:

find . -name '*.dat' | parallel --tag 'grep -oh Author {} | wc -w'
    
por 13.02.2016 / 11:06