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: Mon, 17 Nov 2014 18:05:38 -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/17/2014 05:47 PM, Tiago Ribeiro address@hidden [shell-script] wrote:
> Boa tarde,
> 
> Estou tentando fazer um script que some o terceiro campo de N arquivos, são 
> arquivos simples, mas confesso que não estou
> sabendo nem muito por onde começar.
> 
> o conteúdo dos arquivos são assim:
> 
> # cat arq1.txt 2014-11-16 23:30 10 2014-11-16 23:35 10 2014-11-16 23:40 11 
> 2014-11-16 23:45 11 2014-11-16 23:50 11 2014-11-16
> 23:55 11 2014-11-17 00:00 11
> 
> # cat arq2.txt 2014-11-16 23:30 5 2014-11-16 23:35 5 2014-11-16 23:40 7 
> 2014-11-16 23:45 8 2014-11-16 23:50 10 2014-11-16 23:55
> 10 2014-11-17 00:00 10
> 
> #cat arqN.txt 2014-11-16 23:30 N 2014-11-16 23:35 N 2014-11-16 23:40 N 
> 2014-11-16 23:45 N 2014-11-16 23:50 N 2014-11-16 23:55
> N 2014-11-17 00:00 N
> 
> 
> onde DATA HORA VALOR - são separados por espaço, isto não interfere, posso 
> mudar para ; | ou qualquer outra coisa.
> 
> terei vários arquivos com estes conteúdos, quero somar o campo 3 do arquivo 1 
> + 2 + N  e gerar um novo com DATA HORA (SOMA de
> todos os arquivos).
> 
> # cat soma.txt 2014-11-16 23:30 X 2014-11-16 23:35 X 2014-11-16 23:40 X 
> 2014-11-16 23:45 X 2014-11-16 23:50 X 2014-11-16 23:55
> X 2014-11-17 00:00 X


Tá facil. Provavelmente te falte aí uma teoria sobre arrays associativos (os 
clássicos hashes ou dicionários de outras
linguagens). Eu iria por esse caminho, ou talvez pelo awk. Veja se é viável 
colocar os vários arquivos em um só e fazer um sort
neles (embora a solução que eu vou te apresentar não necessite disso) só para 
agilizar a coisa.

Eu faria um scriptzinho em awk mais ou menos assim:
BEGIN {
    print "Data       Hora\t\t   Quantidade";
}
{
    Qtd[$1" "$2]++;
    count[$1" "$2]+=$NF;
}
END{
    for (var in Qtd)
            print var,"\t","\t",count[var];
}

e aí você o chama com awk -f script.awk arquivo

Daí você pode jogar isso dentro de um shellzinho e viva.

- -- 
echo
920680245503158263821824753325972325831728150312428342077412537729420364909318736253880971145983128276953696631956862757408858710644955909208239222408534030331747172248238293509539472164571738870818862971439246497991147436431430964603600458631758354381402352368220521740203494788796697543569807851284795072334480481413675418412856581412376640379241258356436205061541557366641602992820546646995466P
| dc

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

iQEcBAEBCAAGBQJUalUSAAoJEG7IGPwrPKWrDK8IAJ9/TpHgx9dWuJOIs362BZ/2
1wOkcxEtuhAa3lEcPlJHZjs+j9nTMtdyvKQePSi+qBRDG5hB48kTLrv6KnFj3V8z
VXsfLyJ0zktDhSJzQ86w3SwIrx4HG7r9lnKTmp06VW83OpKYpzpaapOEKM+ssfxK
rXHKtSEQs3rcaY5iZTKJJ847TCteRb39+5ofuu6/DS+W44fvn2PHfQt1epYOuPxT
uNpX6dZ0oxz+x6gXfyImM3upQbP6fwT1bMaqzppfWXrruNJEWuAMHpsIKw2/40l/
PHlZJeF7bTN2vOCfKmUNhZk8r2pvhLoq1fYXX8PXwT/uiO0zass4DIrnXs8v9QI=
=hjAy
-----END PGP SIGNATURE-----


reply via email to

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