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: edjunior
Subject: Re: [shell-script] soma-com-awk!
Date: Mon, 27 Nov 2006 11:48:24 -0200

hey,

tiago, achei seu script bem interessante, porém encontrei um pequeno
problema quando tentei executá-lo. Não tenho certeza disso, mas creio
que a função de 'length' não funciona corretamente pra array,
retornando um determinado erro ("... fatal: attempt to use array
`soma' in a scalar context").
Apanhei um pouco e achei uma solução semelhante, substituindo a tal função:

awk '
BEGIN {
num_colunas = 0
}

{
   split($0,dados)
   for(i=1; i<=NF; i++) {
       if ( NF > num_colunas )
           num_colunas = NF
       soma[i] += dados[i]
   }
}

END {
   for(i=1; i <= num_colunas; i++) {
     printf "soma[%d]=%s ", i, soma[i] } # aqui vamos imprimir bonitinho :)
   print ""
}' dados.txt

(Legal que deu pra tirar um pouco da ferrugem do awk por aqui :p )
hasta!

jr.

On 11/27/06, Tiago Barcellos Peczenyj <address@hidden> wrote:
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


---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como 
perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio 
aviso.
---------------------------------------------------------------------
Sair da lista: address@hidden
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em 
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil


Links do Yahoo! Grupos





reply via email to

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