[FUGSPBR] Leitura de colunas de arquivos

Diego Linke - GAMK linke em calnet.com.br
Sex Nov 29 10:42:47 BRST 2002


Ola,

> 
> aaaaaaaaa	bbbbbbbbbbbb	ccccccccccccc	dddddddddddd
> eeeeeeeee	ffffffffffff	ggggggggggggg	hhhhhhhhhhhh
> iiiiiiiii	jjjjjjjjjjjj	kkkkkkkkkkkkk	llllllllllll
> mmmmmmmmm	nnnnnnnnnnnn	ooooooooooooo	pppppppppppp
> 
> 
> Eu tenho que fazer um totalizador que analise as v?rias colunas. O 
> totalizador vou fazer com o grep, mas a leitura das colunas, que algu?m 
> perguntou h? alguns dias, e eu eu simplesmente n?o consigo achar, nem no 
> hist?rico, nem no meu arquiv?o de emails.
> 
> Algu?m pode me ajudar ? (sim, j? fui ao man do grep.).
>

Seguinte so' complementando! Eu observei varias respostas para esta questao!
Mas a pergunta eh, AWK sendo uma linguagem o porque nao fazer somente, usando ela ?

Bom ai vai um exemplo de um programa em AWK para esta situacao (pelo o que eu entendi):


Arquivo coluna.txt:

iiiiiiiii     jjjjjjjjjjjj    kkkkkkkkkkkkk   llllllllllll
aaaaaaaaa     bbbbbbbbbbbb    ccccccccccccc   dddddddddddd
eeeeeeeee     ffffffffffff    ggggggggggggg   hhhhhhhhhhhh
iiiiiiiii     jjjjjjjjjjjj    kkkkkkkkkkkkk   llllllllllll
mmmmmmmmm     nnnnnnnnnnnn    ooooooooooooo   pppppppppppp

Arquivo count_coluna2.awk:
 
#!/usr/bin/awk -f
BEGIN {
  if (!ARGV[1]) {
    printf("Faltou o parametro do nome do arquivo!\n")
    exit 1
  } else if (ARGV[2]) {
    printf("Sobrou parametros!\n");
    exit 1
  } else if ((getline < ARGV[1]) == -1) {
    printf("Nao foi possivel abrir este arquivo (%s)!\n",ARGV[1])
    exit 1
  }
  cont = 0
}

{
  ok = 1
  for (i = 0; i < cont; i++) {
    if (vetor[i] == $2) {
      ok = 0
      break;
    }
  }
  if (ok == 1) {
    vetor[cont] = $2
    n_vetor[cont]++
    cont++
  } else {
    n_vetor[i]++
  }
}

END {
  for (i = 0; i < cont; i++) {
    printf("Achei %d coluna(s) '%s'\n",n_vetor[i],vetor[i]);
  }
}


Feito isso chmod u+x count_coluna2.awk e:
(casa/ttyv3:~)> ./count_coluna2.awk coluna.txt
Achei 2 coluna(s) 'jjjjjjjjjjjj'
Achei 1 coluna(s) 'bbbbbbbbbbbb'
Achei 1 coluna(s) 'ffffffffffff'
Achei 1 coluna(s) 'nnnnnnnnnnnn'
(casa/ttyv3:~)>


Pronto um programa inteiro em AWK sem "invocar" nenhum processo extra!

Abracos

-- 
[ Diego Linke - GAMK ]
System/Network/Security Administrator
E-Mail/Site: gamk em gamk.com.br - http://www.gamk.com.br
Public Key: http://www.gamk.com.br/gamk.asc
Phone Number: (+5541) 9967-3464

_______________________________________________________________
Sair da Lista: http://www2.fugspbr.org/mailman/listinfo/fugspbr
Historico: http://www4.fugspbr.org/lista/html/FUG-BR/



Mais detalhes sobre a lista de discussão freebsd