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 15:39:36 -0000
User-agent: eGroups-EW/0.82


Eu pensei nisso também. Entretanto o meu locale está configurado para 
pt_BR.UTF-8 e por isso deveria funcionar. De qualquer forma prefiro não 
depender de soluções que variem de acordo com o locale. Não é possível eu saber 
exatamente como ele estará configurado no servidor em que o script vai rodar.

Eu achei uma outra solução:
$ echo -e "aéiou"|gawk -v FS='' '{print $2$3}'
éi

O problema é que vai dar um pouco de trabalho pra imprimir os campos (imagina 
um campo com 30 caracteres: $1$2$3$4$5$6$7$8...$30)

Alguém sabe se é possível imprimir intervalos no awk?

--- Em address@hidden, Tiago Peczenyj <tiago.peczenyj@...> escreveu
>
> 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]
>




reply via email to

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