shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Somar valores em arquivos diferente


From: MrBiTs
Subject: Re: [shell-script] Somar valores em arquivos diferente
Date: Tue, 18 Nov 2014 11:51:24 -0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.2.0

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

On 11/18/2014 11:16 AM, Tiago Ribeiro address@hidden [shell-script] wrote:
> 
> 
> MrBiTs, obrigado.
> 
> Resumindo, ficou bom pacas, proximo passo vai ser jogar no gnuplot, vou 
> brincando aqui com o awk e ir traduzindo pra uma forma
> que eu entenda o que as linhas fazem.
> 
> BEGIN { print "Data       Hora\t\t   Quantidade"; } == OK
> 
> { Qtd[$1" "$2]++; count[$1" "$2]+=$NF; } END{ for (var in Qtd) print 
> var,"\t","\t",count[var]; }
> 
> Tentando entender este restante.
> 

Essa parte é exatamente a parte de trabalho com hashes que eu citei no meu 
primeiro e-mail.

Quando eu faço X[y] estou criando um  hash X com chave y. No seu caso, $1 é a 
data, $2 é a hora e $3 é a quantidade que você quer
somar. Essas são variáveis do AWK. Quando eu faço Qtd[$1" "$2] eu crio um hash 
Qtd com chave data, espaço, hora. Na verdade, esse
Qtd aí poderia muito bem ser tirado, ficando só com o count[$1" "$2], onde eu 
crio um hash count com a chave já citada. O x+=y
indica que eu estou incrementando x com y (ou x = x + y). No caso, eu poderia 
fazer count[$1" "$2]+=$3. O NF também é do AWK e é
uma variável que te dá o número total de campos de um registro. No caso, uma 
linha nossa é um registro. Então, pegando $NF, eu
garanto que estou pegando o último campo e incrementando a chave data hora do 
nosso hash count com esse valor.

O BEGIN/END vai ser executado até o fim do arquivo (como se fosse um for linha 
in $(cat arquivo), então no final da leitura do
arquivo eu vou ter um hash contendo todas as nossas datas e horas e a 
quantidade de ocorrências somadas nele. Agora, só falta
imprimir isso. É o que o for (var in Qtd) faz. Esse for poderia ser escrito com 
for (var in count) também. Ele lê nosso hash e
joga suas chaves para uma variável var (eu sou um cara muito criativo com nomes 
de variáveis). Aí eu imprimo var (a chave data
espaco hora) e imprimo o valor associado a essa chave no dicionário count.

Simples.

- -- 
echo
920680245503158263821824753325972325831728150312428342077412537729420364909318736253880971145983128276953696631956862757408858710644955909208239222408534030331747172248238293509539472164571738870818862971439246497991147436431430964603600458631758354381402352368220521740203494788796697543569807851284795072334480481413675418412856581412376640379241258356436205061541557366641602992820546646995466P
| dc

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQEcBAEBCAAGBQJUa07cAAoJEG7IGPwrPKWry/YH/0pIrnHw7+CAVNXJmHc3JrIf
Xr0h/CNfgFWvXMv675sgpc3DqLXkDXJwgprq/ssHlBTKXmlsiWlQkdotTTohy/VM
Au1G8YR+vztjfZC6DK108KsIq5GDAntGfqdFgq83g23yRon1NPdjNrbBCwyuW/BD
3wWLyqLa3HWX3wyb3hXMvmz6rOL2nqj0QwODMFkH9Sr6L8E0COq7dGo8OI7m6FQa
vmLvHSUmzCjYTFmtFsBw92DpUFYkUINMaqapyRMEuAf3IDR1Q2i5TN8mvYuXWabQ
mz/75wJgUbQx2ERnkFBWE4REJcJBXHWusz2HFkT20IpksBYqEETbDtAY1S6bWxw=
=pHin
-----END PGP SIGNATURE-----


reply via email to

[Prev in Thread] Current Thread [Next in Thread]