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