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

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

Re: [shell-script] Formatação de arquivo orientado a colunas (cut)


From: Fabiano Caixeta Duarte
Subject: Re: [shell-script] Formatação de arquivo orientado a colunas (cut)
Date: Thu, 11 May 2006 00:08:35 -0300
User-agent: Thunderbird 1.5 (X11/20051201)

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Salvador (da Pátria?),

Em bash puro, só nosso amigo Júlio :) ( de preferência um one-liner )

Em awk arrisquei um primeiro rascunho. Utilize o manual do awk (man awk)
para entender o que eu fiz. Em caso de dúvidas, é só perguntar que eu
esclarecerei.

Detalhe importante: o script a seguir não trata a questão das linhas
consecutivas contendo apenas descrição, conforme exemplo a seguir (fica
para a segunda versão do script):
>                 PG OSVALDO REF      FRETE CFE
>                 RECIBO

Outra coisa, a construção /[0-9/]{10}/, ou seja, utilizando
quantificadores "{}", insistiu em não funcionar aqui em casa... preciso
descobrir por que. Por isto a ER meio troncha na linha 17.

Divirta-se ;)

##########
# Script #
##########

#!/usr/bin/awk -f

BEGIN {
  FIELDWIDTHS="16 20 10 5 13 15"
}

function trim(str){
  gsub(/^[ ]+/,"",str)
  gsub(/[ ]+$/,"",str)
  return str
}

$1 ~ /^[^ ]/ {
  cod=$1
  gsub(/[ ]/,";",cod)
}
{
  if ($3 ~ /[0-3][0-9][/][0-1][0-9][/][0-9]/) {
    desc=$2
    data=$3
    trans=trim($4)
    negativo=trim($5)
    positivo=trim($6)
  }
  else {
      $1=""
      print cod,desc,data,trans" +"$0";"negativo";"positivo
  }
}

Abraços!

Fabiano Caixeta Duarte
Consultor em soluções para Redes de Computadores
Linux User #195299
Ribeirão Preto - SP


Salvador S. Scardua escreveu:
>   Estava aguardando ansioso por uma oportunidade de aprender ShellScript, 
> Então que, 
> quando eu menos esperava, meu patrão me deu uma tarefa que achei interessante 
> tentar 
> utilizar ShellScript, dediquei algum tempo de estudo mas cheguei a um 
> impasse, não 
> consigo formatar o arquivo (leia-se novato), o arquivo entrada é este, direto 
> do Mainframe (SCO 5);
> 
> -------------------------------------------------------------------------------
> 3.2.3.05.01.004  DEPRECIACOES        31/12/2005 0197         0,00       
> 3.007,08
>                 TRANSF. SALDO ENC. EXERCICIO
>                 DEPRECIACOES        31/12/2005 0231         0,00       
> 3.007,08
>                 TRANSF. SALDO ENC. EXERCICIO
>                 DEPRECIACOES        31/12/2005 0278        77,64           
> 0,00
>                 VR DEPREC.CFE RELAT. 12/2005
> 3.2.3.05.01.005 MULTAS FISCAIS      22/12/2005 0119        95,44           
> 0,00
>                 PG MULTA POR RETIF. DIA/DS
>                 SEFAZ
>                 MULTAS FISCAIS      22/12/2005 0121         0,00         
> 756,00
>                 AV DE CREDITO       REEMB.MULTA REV
>                 ICMS OUTROS LC 22 DO BR LTDA
>                 MULTAS FISCAIS      22/12/2005 0121         0,00      
> 10.800,00
>                 AV DE CREDITO       REEMB.MULTA
>                 ISOLADA ICMS LC 22 VALTRA DO BR
> 3.2.3.05.01.006 OUTRAS DESPESAS NAO 02/12/2005 0009        40,00           
> 0,00
>                 PG MICHELLE REF     FAXINA ESCRIT.
>                 CFE RECIBO
>                 OUTRAS DESPESAS NAO 02/12/2005 0009        40,00           
> 0,00
>                 PG SIDNEI DE J.     SILVA REF
>                 CAFE P/ LOJA CFE RECIBO
>                 OUTRAS DESPESAS NAO 02/12/2005 0009        32,00           
> 0,00
>                 PG OSVALDO REF      FRETE CFE 
>                 RECIBO
> -------------------------------------------------------------------------------
> 
>   E deve ficar assim (saída);
> 
> ---------------------------------------------------------------------------------------------------------------------------------------
> 3.2.3.05.01.004;DEPRECIACOES        31/12/2005 0197 + TRANSF. SALDO ENC. 
> EXERCICIO;0,00;3.007,08
> 3.2.3.05.01.004;DEPRECIACOES        31/12/2005 0231 + TRANSF. SALDO ENC. 
> EXERCICIO;0,00;3.007,08
> 3.2.3.05.01.004;DEPRECIACOES        31/12/2005 0278 + VR DEPREC.CFE RELAT. 
> 12/2005;77,64;0,00
> 3.2.3.05.01.005;MULTAS FISCAIS      22/12/2005 0119 + PG MULTA POR RETIF. 
> DIA/DS + SEFAZ;95,44;0,00
> 3.2.3.05.01.005;MULTAS FISCAIS      22/12/2005 0121 + AV DE CREDITO       
> REEMB.MULTA REV + ICMS OUTROS LC 22 DO BR LTDA;0,00;756,00
> 3.2.3.05.01.005;MULTAS FISCAIS      22/12/2005 0121 + AV DE CREDITO       
> REEMB.MULTA + ISOLADA ICMS LC 22 VALTRA DO BR;0,00;10.800,00
> 3.2.3.05.01.006;OUTRAS DESPESAS NAO 02/12/2005 0009 + PG MICHELLE REF     
> FAXINA ESCRIT. + CFE RECIBO;40,00;0,00
> 3.2.3.05.01.006;OUTRAS DESPESAS NAO 02/12/2005 0009 + PG SIDNEI DE J.     
> SILVA REF + CAFE P/ LOJA CFE RECIBO;40,00;0,00
> 3.2.3.05.01.006;OUTRAS DESPESAS NAO 02/12/2005 0009 + PG OSVALDO REF      
> FRETE CFE + RECIBO;32,00;0,00
> ---------------------------------------------------------------------------------------------------------------------------------------
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.7 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFEYqqz++b4Zs4fOnMRAuvtAKCiW+3pr/Yj+Ikcdo/8l9gMY4WtBQCfenkc
MbTiBdqyh8yp97fmHJINAPQ=
=1a0T
-----END PGP SIGNATURE-----


reply via email to

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