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

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

Re: [shell-script] Filtrar arquivo texto tabulado


From: Flavio Junior
Subject: Re: [shell-script] Filtrar arquivo texto tabulado
Date: Tue, 3 Jun 2008 16:54:45 -0300

Modo chato e bunito:

while IFS=$'\n' read -r LINHA; do
  TIPO=${LINHA:0:2}
  case "$TIPO" in
      54)
          NRCNPJ=14
          ..........
          ;;
       70)
          ............
esac
  INI=2
  CNPJ=${LINHA:$INI:$NRCNPJ}
  let INI+=$NRCNPJ
,,,,,

done

Jeito simple e o q eu faria :D (sintegra é uma vez por mes):


grep ^50 arquivo.txt > tipo50.txt
grep ^70 arquivo.txt > tipo70.txt
...


Sorte,

Flávio do Carmo Junior
#bash-br @ irc.freenode.net

PS: Me reservo ao direito de erros no codigo, escrevi no proprio mail :)
2008/6/3 Cristiano Ferrari <address@hidden>:
> Pessoal, boa tarde.
>
> Estou construindo um scprit para filtrar arquivos texto usados para
> intercâmbio com o fisco, o famoso sintegra.
>
> Este arquivo texto contém um registro por linha mas, ao invés de usar
> um delimitador, separa os campos por tamanho. E, para ajudar, dentro
> de um mesmo arquivo, há vários tipos de registros (tipo 50, tipo 54,
> tipo 74, etc) e para cada tipo de registro, há uma marcação diferente
> para os campos (variando pelo comprimento do campo).
>
> Por exemplo, nos registro do tipo 50, os campos são marcados assim:
>
> TIPO = 2 posições
> CNPJ = 14 posições
> IE = 14 posições
> DATA = 8 posições
> UF = 2 posições
> MODELO = 2 posições
> SERIE = 3 posições
> SUBSERIE = 2 posições
> NUMERO = 6 posições
>
> e por aí vai...
>
> Gostaria de saber qual seria a melhor maneira de eu filtrar este
> arquivo, atribuindo os valores listados em cada linha para estas
> variáveis, de modo a poder tratar o conteúdo do arquivo.
>
> Se o formato do arquivo usasse delimitadores, ao invés de comprimento
> para separar os campos, já sei como faria.
>
> Mas deste jeito, não tenho a menor idéia...
>
> Alguém me ajuda?
>
> Abraço...
>
> Cristiano
>
> 


reply via email to

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