Um lote que cout o número de ocorrências

0

Eu tenho que extrair o número de palavras usando cada letra do alfabeto de A a Z. O script que eu tenho que criar cria como parâmetro o nome do arquivo de dicionário para analisar e será usado assim. /langstat.sh dico.txt

Eu tentei algumas coisas assim:

    #!/bin/bash
    cat ~/dico.txt | grep -o A | wc -l

O problema é que ele me dá o número de A em todo o arquivo, mas quero saber apenas o número de palavras com um A.

Você poderia me dar uma ajuda, por favor?

    
por Julien S 24.02.2015 / 16:35

2 respostas

1

Você pode usar isso:

for c in {A..Z}; do
  echo -n "$c: "
  tr ' ' '\n' < dico.txt | grep $c | wc -l
done

Funciona da seguinte forma: O loop for percorre cada caractere de A a Z. tr substitui todos os espaços por novas linhas, portanto, cada palavra tem sua própria linha. Então grep procura o caractere na palavra e o imprime se o caractere for encontrado. wc conta essas linhas.

    
por 24.02.2015 / 16:48
0

Isso ajuda?

#!/bin/bash
tr ' ' '\n' < "$1" | sort -u > my.tmp
for letter in {A..Z}
do
    printf "Words with %c : " $letter
    grep -iwc "\w*$letter\w*" my.tmp
    echo
done
rm my.tmp
    
por 24.02.2015 / 16:43