shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Extrair campos de tamanho fixo (problema com acentuação)


From: rapha.couto
Subject: Re: Extrair campos de tamanho fixo (problema com acentuação)
Date: Tue, 09 Oct 2012 17:47:02 -0000
User-agent: eGroups-EW/0.82

É, aqui estou usando a versão 3.1.6.

Eu contornei com o seguinte código:

gawk -v FS='' '
function fields(start, end){
  str="";
  for(i=start; i<=end; i++) str=str$i;
  return str;
}
{
  campo1=fields(1,10);
  campo2=fields(11,15);
     ...

  print campo1...
}'   arquivo_entrada

A função fields foi só pra facilitar a impressão dos campos. Sem ele eu teria 
que fazer campo1=$1$2$3$4$5...

Ficou bem mais complexo, mas acredito que seja mais rápido do que a solução em 
sed e não tem o problema com acentuação. Acho que vou ficar com essa solução 
mesmo.

Obrigado a todos.

--- Em address@hidden, Eri Ramos Bastos <bastos.eri@...> escreveu
>
> Sei não... acho que é bug mesmo:
> 
> [0.75][1426] ebastos:/tmp$> echo 'aeiou'|gawk-3.1.5/gawk -v FIELDWIDTHS='1
> 2 2' -v OFS=',' '{$1=$1; print}'
> a,ei
> [0.57][1426] ebastos:/tmp$> echo 'aéiou'|gawk-3.1.5/gawk -v FIELDWIDTHS='1
> 2 2' -v OFS=',' '{$1=$1; print}'
> a,é
> 
> [0.67][1426] ebastos:/tmp$> echo 'aeiou'|gawk-3.1.6/gawk -v FIELDWIDTHS='1
> 2 2' -v OFS=',' '{$1=$1; print}'
> a,ei,ou
> [0.59][1426] ebastos:/tmp$> echo 'aéiou'|gawk-3.1.6/gawk -v FIELDWIDTHS='1
> 2 2' -v OFS=',' '{$1=$1; print}'
> a,é,io
> 
> [0.61][1426] ebastos:/tmp$> echo 'aeiou'|gawk-3.1.7/gawk -v FIELDWIDTHS='1
> 2 2' -v OFS=',' '{$1=$1; print}'
> a,ei,ou
> [0.55][1427] ebastos:/tmp$> echo 'aéiou'|gawk-3.1.7/gawk -v FIELDWIDTHS='1
> 2 2' -v OFS=',' '{$1=$1; print}'
> a,éi,ou
> 
> []'s
> Eri
> 
> 
> 
> 2012/10/9 Tiago Peczenyj <tiago.peczenyj@...>
> 
> > Não é bug, provavelmente é uma variavel de ambiente relacionada ao conjunto
> > de caracteres (como LC_COLLATE, essas coisas) que esta diferente.
> >
> > 2012/10/9 Eri Ramos Bastos <bastos.eri@...>
> >
> > > **
> > >
> > >
> > > Interessante... Parece ser um bug.
> > >
> > > -- Ubuntu 10.4:
> > >
> > > [0.67][1141] ebastos:~$> echo 'aeiou'|gawk -v FIELDWIDTHS='1 2 2' -v
> > >
> > > OFS=',' '{$1=$1; print}'
> > > a,ei,ou
> > > [0.74][1141] ebastos:~$> echo 'aéiou'|gawk -v FIELDWIDTHS='1 2 2' -v
> > > OFS=',' '{$1=$1; print}'
> > > a,éi,ou
> > > [0.71][1142] ebastos:~$> gawk --version
> > > GNU Awk 3.1.8
> > > Copyright (C) 1989, 1991-2010 Free Software Foundation.
> > >
> > > -- CentOS 5.3
> > >
> > >
> > > $ echo 'aeiou'|gawk -v FIELDWIDTHS='1 2 2' -v OFS=',' '{$1=$1; print}'
> > > a,ei,ou
> > >
> > > $ echo 'aéiou'|gawk -v FIELDWIDTHS='1 2 2' -v OFS=',' '{$1=$1; print}'
> > > a,é,io
> > >
> > > $ gawk --version
> > > GNU Awk 3.1.5
> > > Copyright (C) 1989, 1991-2005 Free Software Foundation.
> > >
> > > 2012/10/9 rapha.couto <rylphs@...>
> > >
> > >
> > > > Olá a todos.
> > > >
> > > > Estou criando um script o qual deve extrair os dados de um arquivo com
> > > > campos de tamanho fixo. Estava usando o gawk pra isso. O problema é
> > que o
> > > > mesmo se confunde com campos com acentuação.
> > > >
> > > > $ echo 'aeiou'|gawk -v FIELDWIDTHS='1 2 2' -v OFS=',' '{$1=$1; print}'
> > > > a,ei,ou
> > > >
> > > > $ echo 'aéiou'|gawk -v FIELDWIDTHS='1 2 2' -v OFS=',' '{$1=$1; print}'
> > > > a,é,io
> > > >
> > > > Parece que ele está contando bytes e não caracteres e como os acentos
> > > > possuem 2 bytes o resultado não é o esperado. Eu tentei também o cut
> > mas
> > > > mesmo com a opção de seleção por caracter não deu certo:
> > > > $ echo 'aeiou'|cut -b 2-3
> > > > ei
> > > >
> > > > $ echo 'aéiou'|cut -b 2-3
> > > > é
> > > >
> > > > $ echo 'aéiou'|cut -c 2-3 (esse deveria funcionar)
> > > > é
> > > >
> > > > A única solução que eu encontrei foi usar o sed:
> > > > $ echo 'aéiou'|sed 's/^.\{1\}\(.\{2\}\).*$/\1/'
> > > > éi
> > > >
> > > > Isso resolveu o meu problema. Entretanto, o problema é que essa
> > solução é
> > > > extremamente mais lenta do que as primeiras e como o arquivo é grande,
> > o
> > > > processo de extração está demorando muito. Alguém conhece uma solução
> > > mais
> > > > veloz?
> > > >
> > > > Desde já, obrigado!
> > > >
> > > >
> > > >
> > > > ------------------------------------
> > >
> > > >
> > > > ----------------------------------------------------------
> > > > 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
> > > >
> > > >
> > > >
> > >
> > > [As partes desta mensagem que não continham texto foram removidas]
> > >
> > >
> > >
> >
> >
> >
> > --
> > Tiago B. Peczenyj
> > Linux User #405772
> >
> > http://pacman.blog.br
> >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
> >
> > ------------------------------------
> >
> > ---------------------------------------------------------------------
> > 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
> >
> >
> >
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>




reply via email to

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