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: Ricardo Acosta
Subject: Re: [shell-script] soma-com-awk!
Date: Mon, 27 Nov 2006 14:15:27 -0200

Valeu a dica!
funcionou perfeitamente!

[]s
acosta

2006/11/27, edjunior <address@hidden>:
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
>
>
>


---------------------------------------------------------------------
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





--
__________________________
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!


reply via email to

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