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

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

Re: [shell-script] soma-com-awk!


From: Tiago Barcellos Peczenyj
Subject: Re: [shell-script] soma-com-awk!
Date: Mon, 27 Nov 2006 10:09:14 -0200

Sim, a melhor opção é fazer, em awk, usando vetores. Em awk, uma
variavel criada tem valor 0. Matrizes são criadas dinamicamente, e vc
pode adicionar novas posições em qq momento.

ex:
a[1] = 10
a[134723984] = 90
a["xxx"] = -1

Veja só como ficaria
awk '{
  split($0,dados)
  for(i in dados){
     soma[i]+= dados[i]
 }
}
END{for(i=1;i<=length(soma);i++) {
   printf "%s ",soma[i]} # aqui vamos imprimir bonitinho :)
}' dados.txt

Abraços

On 11/27/06, Ricardo Acosta <address@hidden> wrote:






Ola Camaradas,
 bom dia!

 como fazer pra somar colunas com o awk.
 sem ter q declarar coluna por coluna!
 teria como fazer uma matriz indexada?

 vejam o exemplo
 ...
 acosta@clima: ~$ cat dados.dat
 COL1    COL2    COL3    COL4
 0001    0011    0111    1111
 0002    0012    0112    1112
 0003    0013    0113    1113
 0004    0014    0114    1114
 0005    0015    0115    1115
 ...

 sei fazer desta forma, mas a medida que o numero de coluna aumenta.
 torna-se inviavel!
 pois trabalhos com arquivos em que o numero de colunas varia de
 momento em momento.
 imaginem este numero varinado entre 50 - 70 colunas!

 ...
 acosta@clima: ~$ cat soma.sh
 #!/bin/bash
 awk '{ sum1 += $1
        sum2 += $2
        sum3 += $3
        sum4 += $4
      }
      END{print sum1, sum2, sum3, sum4}
      ' dados.dat
 ...
 o resultado que obtenho está certo, mas alguem saberia sugerir outra
 forma de fazer isso?
 mesmo que nao seja com o AWK!

 ...
 acosta@clima: ~$ ./soma.sh
 15 65 565 5565
 ...

 []s
 acosta

 --
 __________________________
 Ricardo Acosta
 Laboratório de Clima e Biosfera
 Depto. de Ciências Atmosféricas
 Universidade de São Paulo

 Dê emoção à sua vida:
 Faça pipocas com a panela aberta!



--
Tiago B Peczenyj
Linux User #405772

# cd /pub
# more beer


reply via email to

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