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 12:34:34 -0200

ola.

Estranho, na versão aqui em casa funcionou, talvez seja a versão do gawk.

Em todo o caso esta forma deve ser mais eficiente do que fazer um if a cada
iteração:

function sizeof(a) { c=0; for(e in a) c++; return(c) }

Outra forma é deixar que o comando sort 'arrume' a saida, mas obrigado pelo
aviso!

On 11/27/06, edjunior <address@hidden> wrote:
>
>   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<tiago.peczenyj%40gmail.com>>
> 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<ricardo.acosta%40gmail.com>>
> 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<shell-script-unsubscribe%40yahoogrupos.com.br>
> > ----------------------------------------------------------
> > 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
> >
> >
> >
>
>  
>



-- 
Tiago B Peczenyj
Linux User #405772

# cd /pub
# more beer


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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