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

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

Re: [shell-script] Re: Filtro para TXT - Campos com Comprimento Fixo


From: Andreyev Dias de Melo
Subject: Re: [shell-script] Re: Filtro para TXT - Campos com Comprimento Fixo
Date: 10 Sep 2003 13:39:48 -0300

Oi Cesar,

Não sei se compreendi a sua dúvida, mas acho que os campos não sofrendo
variações vc poderia fazer algo assim:

#------------------------>8----------------------
BEGIN {
print "Tipo\t\tSerie\tCodigo\t\tData"
} # 'cabecalho' do programa
{
if ( substr($1, 1, 1) ~ /E/ ){
print "Entrada \t" substr($1, 2, 1) "\t" \
substr($1, 3, 8) "\t" substr($1, 11, 4)

} else {
print "Saida \t\t" substr($1, 2, 1) "\t" \
substr($1, 3, 8) "\t" substr($1, 11,4)
}
}
END {}
#------------------------>8----------------------

Do man do gawk;

"substr(s, i [, n])      Returns the at most n-character substring of s
starting at i.  If n is omitted, the rest of s is used."


Pode-se pensar alguma coisa com o "cut -c"...

Espero que tenha sido util!

À disposição,

[]s

Andreyev

ps: caso não tenha 'habilidade' com o awk:

execute assim: awk -f <arquivo script> <arquivo script>

as "\" das linhas 6 e 10 são "quebras" de linha

mais inf em: http://www.delorie.com/gnu/docs/gawk/

Em Qua, 2003-09-10 às 10:41, César A. K. Grossmann escreveu:
> --- Em address@hidden, "Gabriel Federizzi"
> <gabriel@s...> escreveu
> > E se vc usar:   tr -s " " "|"   
> > 
> > para substituir cada conjunto de espaços por um | ou autra coisa do
> genero.
> > Assim você tem um separador.
> 
> Talvez eu não tenha explicado direito o problema. Suponha que eu tenho
> o seguinte banco de dados (vou tentar colocar duas linhas, cada linha
> é um registro, ok?):
> 
> E1199912100013
> S1200001030015
> 
> Esquisito? Mas é mais ou menos isto que eu tenho, só que as linhas são
> maiores. Examinando a documentação fornecida pelo cliente, eu sei que
> o primeiro caracter ("E" na primeira linha, "S" na segunda") é o tipo
> de registro, por exemplo, e "E" significa entrada enquanto "S"
> significa saída. O segundo caracter ("1" nos dois registros do
> exemplo) é um número de série, por exemplo. Os oito caracteres que
> seguem são a data do movimento, por exemplo, e os quatro números que
> restam são um códgio qualquer. Colocando esta informação na forma de
> uma tabelinha, eu teria o seguinte:
> 
> Campo  Posicao Comprimento
> Tipo         1           1
> Serie        2           1
> Data         3           8
> Codigo      11           4
> 
> Este seria o leiaute do arquivo fornecido. Eu não preciso tentar
> adivinhar isto, ele é fornecido (embora às vezes o leiaute fornecido
> não confira com o leiaute do arquivo, ou seja, está com erros). Só que
> nem sempre este leiaute está no formato que eu preciso. Suponhamos no
> exemplo acima que o cliente deveria ter entregue um leiaute um pouco
> diferente, com o campo Codigo entre Serie e Data, e com um comprimento
> de 3 posicoes, e Serie deveria ter duas posições, em vez de uma só. Ou
> seja, o leiaute deveria ser:
> 
> Campo  Posicao Comprimento
> Tipo         1           1
> Serie        2           2
> Codigo       4           3
> Data         7           8
> 
> O meu problema é escrever um programa que leia o arquivo original,
> faça o desdobramento do mesmo nos campos *fornecidos*, e escreva o
> arquivo no formato *desejado*. Um filtro, portanto...
> 
> Ficou mais claro?
> 
> []s
> --
> César A. K. Grossmann
> http://www.LinuxByGrossmann.cjb.net/
> 
> 
> 
> ---------------------------------------------------------------------
> 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.listasdiscussao.cjb.net
> ---------------------------------------------------------------------
>  
> 
> Seu uso do Yahoo! Grupos é sujeito às regras descritas em: 
> http://br.yahoo.com/info/utos.html 
> 



reply via email to

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