[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
>
>