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

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

Re: [shell-script] Re: direcionando blocos de textos p/ outro arquivo


From: Tiago Barcellos Peczenyj
Subject: Re: [shell-script] Re: direcionando blocos de textos p/ outro arquivo
Date: Wed, 8 Aug 2007 21:45:26 -0300

dgotek

Agora sim ficou mais claro

awk -v fulano="pereira" 'BEGIN{ RS=".     "
            IGNORECASE=1
}
match($0,"[^,. ]*"fulano"[^,]*, C.N.P.J."){
        print "nome encontrado: "substr($0,RSTART,RLENGTH-10)
        print "registro completo:"
        print $0
        print "----------------------------------------------"
}' dados

Vejamos linha a linha:

 - tenho uma variavel chamada fulano, que vai ser o nome do cliente que eu
procuro (estou com falta de imaginação)
- defino que o separador de registros é um ponto seguido por cinco espaços
- para cada registro eu vou verificar se eu encontro uma expressão regular
composta de 3 pedaços

"[^,. ]*"  ->  qualquer caracter que não seja espaço em branco, virgula ou
ponto, de 0 a N vezes
fulano   -> pedaço do nome literal
"[^,]*, C.N.P.J." -> qualquer quantidade de caracteres que não seja virgula,
seguido de ", C.N.P.J"

Na verdade eu deveria escrever C\.N\.P\.J\. mas... IMHO dificilmente esta ER
vai casar com outra coisa

- quando eu encontro eu pego a substring entre RSTART com tamanho RLENGTH-10
Q diabos é isso?
* RSTART é a posição onde o match encontrou a expressão regular
* RLENGTH é o tamanho da string encontrada,
* pra retirar o ', C.N.P.J' eu diminuo 10

Se vc não precisa do nome encontrado, ignore esta parte. RSTART e RLENGTH
são variaveis globais setadas pela função match.

Agora é customizar e adaptar ao seu problema. Acho que cobri boa parte dos
casos que vc descreveu.

[]´s

Tiago


On 8/8/07, dgotek <address@hidden> wrote:
>
>   >
> > awk -F \, -v padrao="palavra_a_ser_encontrada" 'BEGIN{ RS=";" } $0 ~
> > padrao{print $1}'
> >
> > entretanto o seu arquivo possui um formato que pra mim não ficou
> claro,
> > afinal o que diferencia cada registro ? é um tamanho fixo de
> caracteres?
>
> é o nome do cliente, o que separa cada registro é a quantidade de
> espaço depois do ponto final, que 5 a 9 espaços, até começar o outro
> registro.
> são registros, que na verdade são boletins/memorandos de entrega de
> mercadorias.
>
> ex.
>
> Joaquim Pereira da Silva, C.N.P.J.: 54.897.987/0001-58, data da saída
> da mercadoria 25/06/2006, pela transportadora ultradevagar, data da
> entrega da mercadoria 12/07/2006. Quantidade de Volumes 45, Peso
> Bruto 200.
>
> as vezes o nome do cliente vem no meio do registro.
>
> Data da saída da mercadoria 25/06/2006, pela transportadora
> ultradevagar, data da entrega da mercadoria 12/07/2006.Joaquim
> Pereira da Silva, C.N.P.J.: 54.897.987/0001-58, Quantidade de Volumes
> 45, Peso Bruto 200.
>
> > com esse comando que vc me passou consigo separar só o nome. Na
> verdade eu tenho que separar por bloco, como vc observar no exemplo,
> acima, eu teria que pegar da coluna 1, linha 1, até que o espaço do
> bloco fosse maior que 5;
>
> obrigado + uma vez
> >
> > >
> > > > >
> >
>
>  
>



-- 
Tiago B Peczenyj
Linux User #405772

http://peczenyj.blogspot.com/


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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