Shell Script contar quantidade palavras repetidas [RESOLVIDO]

1. Shell Script contar quantidade palavras repetidas [RESOLVIDO]

Taffarel
xikara

(usa Outra)

Enviado em 07/11/2014 - 18:52h

Boa noite
seguinte situação

linhas=$(asterisk -rx "khomp channels show")
echo ${#linhas}
resultado 6873 letras

a variável linha tem um unica linha 6873 letras. O campo a ser procurado e (TELEMIG CEL),(TIM) (OI)...
Gostaria de saber quantas vezes e repetido cada opção

obrigado


  


2. Re: Shell Script contar quantidade palavras repetidas [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 07/11/2014 - 19:17h

Uma só linha com tantos caracteres?

Existe um separador entre os campos da linha?

Minha sugestão: transponha os diferentes campos/blocos de interesse de cada linha em múltiplas linhas (usando sed ou tr, por exemplo), ordene-as (sort) e use o uniq com a opção de contagem de linhas adjacentes idênticas.

Outra opção: um one-liner em Perl que separe os campos, conte as ocorrências que lhe interessam, e no final imprima a lista de palavras e contagem. Não sei o formato da sua linha, mas o seguinte one-liner isola palavras de uma linha e imprime a contagem de cada uma.

perl -e '$_=<>; while(s/(\w+)\W+(.*)/$2/){ $counter{lc($1)}++ } foreach (sort(keys(%counter))) { print "$_ $counter{$_}\n"; }' 



3. obrigado pela ajuda

Taffarel
xikara

(usa Outra)

Enviado em 07/11/2014 - 19:46h

Vou testa agora e te dou o retorno


4. ele e assim mais numa linha unica

Taffarel
xikara

(usa Outra)

Enviado em 07/11/2014 - 19:49h

<K> ------------------------------------------------------------------------ <K> |--------------------- Khomp Channels and Connections -------------------| <K> |------------------------------------------------------------------------| <K> | hw | asterisk | call | channel | | <K> | id | status | status | status | type | <K> ------------------------------------------------------------------------ <K> | 0,000 | unused | Free | Enabled | FXO | <K> | 0,001 | unused | Free | Enabled | FXO | <K> | 0,002 | unused | Free | Enabled | FXO | <K> | 0,003 | unused | Free | Enabled | FXO | <K> | 0,004 | unused | Free | Idle (TIM) | 70% |*** | GSM | <K> | 0,005 | unused | Free | Idle (TELEMIG CEL) | 77% |*** | GSM | <K> | 1,000 | unused | Failure | Unreacheable | R2br | <K> | 1,001 | unused | Failure | Unreacheable | R2br | <K> | 1,002 | unused | Failure | Unreacheable | R2br | <K> | 1,003 | unused | Failure | Unreacheable | R2br | <K> | 1,004 | unused | Failure | Unreacheable | R2br | <K> | 1,005 | unused | Failure | Unreacheable | R2br | <K> | 1,006 | unused | Failure | Unreacheable | R2br | <K> | 1,007 | unused | Failure | Unreacheable | R2br | <K> | 1,008 | unused | Failure | Unreacheable | R2br | <K> | 1,009 | unused | Failure | Unreacheable | R2br | <K> | 1,010 | unused | Failure | Unreacheable | R2br | <K> | 1,011 | unused | Failure | Unreacheable | R2br | <K> | 1,012 | unused | Failure | Unreacheable | R2br | <K> | 1,013 | unused | Failure | Unreacheable | R2br | <K> | 1,014 | unused | Failure | Unreacheable | R2br | <K> | 1,015 | unused | Failure | Unreacheable | R2br | <K> | 1,016 | unused | Failure | Unreacheable | R2br | <K> | 1,017 | unused | Failure | Unreacheable | R2br | <K> | 1,018 | unused | Failure | Unreacheable | R2br | <K> | 1,019 | unused | Failure | Unreacheable | R2br | <K> | 1,020 | unused | Failure | Unreacheable | R2br | <K> | 1,021 | unused | Failure | Unreacheable | R2br | <K> | 1,022 | unused | Failure | Unreacheable | R2br | <K> | 1,023 | unused | Failure | Unreacheable | R2br | <K> | 1,024 | unused | Failure | Unreacheable | R2br | <K> | 1,025 | unused | Failure | Unreacheable | R2br | <K> | 1,026 | unused | Failure | Unreacheable | R2br | <K> | 1,027 | unused | Failure | Unreacheable | R2br | <K> | 1,028 | unused | Failure | Unreacheable | R2br | <K> | 1,029 | unused | Failure | Unreacheable | R2br | <K> ------------------------------------------------------------------------


5. Não estou conseguindo

Taffarel
xikara

(usa Outra)

Enviado em 07/11/2014 - 20:49h

#!/bin/bash
Linha="<K> --------------- Khomp Channels and Connections -------------------| <K> "
so uma parte
Palavra="oi"
Linhas=$(asterisk -rx "khomp channels show")
echo ${#linhas}

for i++ do ${#linhas} {
grep $Palavra $Linha | cut -d '.' -f 2
$Linha= Deleta($Linha,Posicao(Palavra))

}
echo i

e mais almenos assim que eu queria se alguem saber
o codigo assima esta errado so um exemplo


6. Re: Shell Script contar quantidade palavras repetidas [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 07/11/2014 - 23:32h

Tem certeza que a variável tem somente uma linha? A cara do bloco de saída que você postou é a de uma tabela, que pode ter perdido sua formatação apenas na hora de imprimir. Quando você imprimiu, lembrou-se de colocar a expansão da variável entre aspas (por exemplo: “echo "$linha"”)?

Se, de fato, a saída tiver múltiplas linhas, facilita muito.


7. obrigado

Taffarel
xikara

(usa Outra)

Enviado em 08/11/2014 - 08:23h

Não coloquei as "" não vou fazer isso e testar


8. Deu certo

Taffarel
xikara

(usa Outra)

Enviado em 08/11/2014 - 08:29h

echo "$linhas"

assim imprimiu em varias linha
vou tentar fazer a rotina agora


9. Consegui com uma unica linha

Taffarel
xikara

(usa Outra)

Enviado em 08/11/2014 - 09:02h

string="pano-de-trato coca-cola pepis-cola"
echo "a string tem ${#string} caracteres "
cont=0
for((i=0;$i < ${#string}; i++)){
if [ "${string:$i:4}" == 'cola' ]; then
echo "${string:$i:4}"
cont=`expr $cont + 1`
fi
}
echo -e "\n a string '$string' tem $cont '-' "





Obrigado a todos


10. Re: Shell Script contar quantidade palavras repetidas [RESOLVIDO]

Marcio M. Bauer
Marcio M. Bauer

(usa Slackware)

Enviado em 28/08/2015 - 01:44h


echo "Lorem ipsum dolor sit sit amet." | tr [:space:] '\n' | grep -v "^\s*$" | sort | uniq -c | sort -bnr

Esse aqui tbm é bom, e vc pode substituir o echo palavra por cat arquivo.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts