[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]
>
Re: [shell-script] Extrair campos de tamanho fixo (problema com acentuação), Luís Tavares, 2012/10/09