Contagem de várias palavras-chave em um site

2

Atualmente tenho o seguinte comando

wget -O - -q http_url_goes_here |
    grep -Eci '(cart|shop|buy|order|store|shipping|products|price)'

Isso me fornece uma contagem de TODAS as ocorrências de cada uma das seguintes palavras-chave no site (cart|shop|buy|order|store|shipping|products|price) .

O problema que tenho é que eu tenho contagens tão altas quanto 200 se algumas das palavras ocorrerem várias vezes. Gostaria de obter uma contagem entre 0 e 8, o que indicaria quantas palavras-chave foram encontradas no site. Como na contagem deve ser incrementado por um máximo de 1 para cada palavra-chave.

Agradeço sua ajuda.

    
por rho 09.09.2014 / 16:53

3 respostas

4

Com o GNU grep:

wget -O - -q http_url_goes_here |
    grep -wEoi 'cart|shop|buy|order|store|shipping|products|price' | 
        sort -fu | wc -l

Eu adicionei o comando -w ao seu comando grep para que você não conte, por exemplo, bispo como um sucesso de loja.

    
por 09.09.2014 / 17:04
2

POSIXly:

tr -cs '[:alnum:]_' '[\n*]' | grep -xiF 'cart
shop
buy
order
store
shipping
products
price' | sort -fu | wc -l

Você também pode ter a lista de palavras em um arquivo e usar:

tr -cs '[:alnum:]_' '[\n*]' | grep -xiFf word.list | sort -fu | wc -l

Você pode torná-lo mais eficiente fazendo isso:

tr -cs '[:alnum:]_' '[\n*]' | awk -v o=0 '
   {$0=tolower($0)}
   NR==FNR{a[$0];n++;next}
   {
     for (i in a) if ($0 == i) {
       if (++o == n) exit
       delete a[i]
     }
   }
   END {print o}' word.list -
    
por 09.09.2014 / 17:25
0

A resposta de Volker Siegel é muito útil. No entanto, se você quiser que a saída seja um número entre 0 e 8 , adicione um grep para contar as linhas.

$ wget -O - -q ix.de | grep -Eoi '(cart|shop|buy|order|store|shipping|products|price)' | sort -i | uniq -i | grep -c ''
2

Observe que agora o sinalizador -c de uniq não é necessário.

    
por 09.09.2014 / 17:17

Tags