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 19:27:10 -0000
User-agent: eGroups-EW/0.82

Pois é Julio. No cut a opção "-c" deveria funcionar já que seleciona caracteres 
e não bytes. Mas mesmo assim, ele se comporta da mesma forma que com a opção 
"-b".

$ echo "aeiou"|cut -b 2-3
ei
$ echo "aéiou"|cut -b 2-3 (como esperado)
é
$ echo "aéiou"|cut -c 2-3 (deveria funcionar)
é

No final das contas acabei resolvendo com o gawk.

--- Em address@hidden, "Julio C. Neves" <julio.neves@...> escreveu
>
> Fala Pac,
> isso não é referente ao LC_COLLATE (já testei) e não creio que seja
> referente a qq outra variável. Creio que seja no tratamento dos caracteres
> UTF-8.
> 
> Já havia notado esse comportamento no wc. Repare:
> 
> $ wc -c <<< aeiouc
> 7
> $ wc -c <<< áéíóúç
> 13
> 
> Mas o wc tem a opção -m ou --chars que quebra esse galho. Veja:
> 
> $ wc -m <<< aeiouc
> 7
> $ wc -m <<< áéíóúç
> 7
> 
> Já é sabido que ele tb conta o new-line e por isso sempre soma 1 a mais.
> 
> Com o cut não conheço nenhuma opção que dê um tratamento similar, isso é,
> corte pela qtd de chars e não de bytes.
> 
> Abcs,
> Julio
> 
> *
> *
> 
> 
> 
> Em 9 de outubro de 2012 11:53, 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]
> >
> >
> >
> > ------------------------------------
> >
> > ---------------------------------------------------------------------
> > 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]