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: Tiago Barcellos Peczenyj
Subject: Re: [shell-script] Formatação de arquivo orientado a colunas (cut)
Date: Wed, 10 May 2006 19:16:32 -0300

Vamos por partes

Onde começa e onde termina uma linha nesse arquivo ?

Quantas linhas tem por 'registro'  ?

On 5/10/06, Salvador S. Scardua <address@hidden> wrote:
  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
---------------------------------------------------------------------------------------------------------------------------------------

 Eu ia escrever em outra linguagem a solução, inclusive já havia até escrito o 
algoritmo (reescrevi em uma espécie de
algol+shell), dêem uma olhada;

    ####################################################################
    ######## LOOP PARA PERCORRER TODO ARQUIVO, LINHA A LINHA    ########
    ####################################################################


    if [[ `cut -c15` = [:digit:] ]]     # Conteúdo da coluna 15 é um dígito?
    then
       $conta=`cut -c-15`               # SIM, variável conta recebe Conteúdo 
do primeiro campo

    ####################################################################
    ######## LOOP PARA CAPTURAR TODO CONTEÚDO DA COLUNA DETALHES #######
    ######## Opções de Critério: CHECAR COLUNA ADIÇÔES OU EXCLUS.#######
    ####################################################################

       if [[ `cut -c64` = [:digit:] ]]  # Conteúdo da coluna 64 é um dígitio?
       then
          $detalhes=`cut -c17-51`       # SIM, colhe o conteúdo das colunas 
onde estão os valores
          $adicao=`cut -c53-65`
          $exclusao=`cut -c66-79`
       else
          $detalhes=$detalhes" + "`cut -c17-51` # NÃO, concatena o conteúdo de 
detalhes
       fi
       echo $conta\;$detalhes\;$adicao\;$exclusao >> arqformatado.csv # 
Descarrega o conteúdo das variáveis no arquivo
    fi


--
Tiago B Peczenyj
Linux User #405772

# cd /pub
# more beer


reply via email to

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