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: Tiago Peczenyj
Subject: Re: [shell-script] Somar valores em arquivos diferente
Date: Tue, 18 Nov 2014 11:45:07 -0200

resumidamente

awk '{
   x[$1 " " $2 ] += $3 
END { 
  for(i in x) { 
    print x[i ], i 
  } 
}'

este AWK-script tem duas sessões: uma padrão, os primeiros { e } que sera executado a cada linha. e uma sessão END onde sera executado no final.

quando vc faz for( i in x ) vc esta fazendo um "foreach", ou seja, uma iteração sobre todos os indices do array x. fazendo print x[i] vc pega aquele valor, fazendo print i, vc imprime o valor do indice utilizado

arrays em AWK na verdade são hashtables. vc pode usar uma chave qualquer, numeros ou palavras, como indice. AWK não tem "tipo" ( apesar de diferenciar arrays de variaveis comuns, coisa que o Perl depois se inspirou e resolveu adotar sigils $ e @ para diferenciar uma variavel escalar de uma variavel array, e % para um hash ) então podemos brincar.

quando vc faz $1 " " $2 estamos concatenando as strings que encontramos no primeiro campo e no segundo campo com um espaço em branco entre elas. em AWK a intepolação de strings ocorre quando vc simplesmente coloca as variaveis uma depois da outra. troque o " " por um "-" e veja o que acontece.

quando vc me disse que queria fazer

A B C
A B C
A B C
A B C

algo como

A B C+C+C+C

eu identifiquei que vc queria fazer algo como
[A B] C
[A B] C
[A B] C
[A B] C

ou seja, vc queria fazer uma soma - assim que eu entendi - agrupando a data e hora iguais.

digamos que fosse algo como

X 1
Y 2
X 3
Y 5

e eu quisesse uma soma do tipo

X 4
Y 7

eu posso usar arrays. por exemplo

{ a[ $1 ] += $2 }

nas quatro linhas eu teria

a[ X ] += 1;  a[ X ] no começo não tem nada (0), passa a ter 1
a[ Y ] += 2;  a[ Y ] idem, passa a ter 2
a[ X ] += 3;  a[ X ] agora é 1, somando 3 fica 4
a[ Y ] += 5;  vc ja entendeu

 eu só criei uma chave composta. entretanto não estou acompanhando toda a thread para saber se isso reflete ou não o que vc precisa.



2014-11-18 11:20 GMT-02:00 Tiago Ribeiro address@hidden [shell-script] <address@hidden>:
 

Tiago, chegou no resultado, mas está imprimindo a soma no primeiro campo, 
ai pra colocar em ordem fica mais complicado, mas ai dá pra ir mexendo também.

Além do mais, tenho que dar uma boa lido no que está sendo feito para entender 
melhor.

o retorno ficou assim:

2 2014-11-16 06:15
4 2014-11-15 17:05
1 2014-11-17 03:45
2 2014-11-16 14:35



Em 17/11/2014, à(s) 18:47, Tiago Peczenyj address@hidden [shell-script] <address@hidden> escreveu:



putz... agora eu percebi que a chave tem 2 campos... faça isso e teste

awk '{ x[$1 " " $2 ] += $3 } END { for(i in x) { print x[i ], i } }'







--
Tiago B. Peczenyj
Linux User #405772

http://about.me/peczenyj

reply via email to

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