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: Alain M.
Subject: Re: [shell-script] Filtrar arquivo texto tabulado
Date: Tue, 03 Jun 2008 18:30:45 -0300
User-agent: Thunderbird 2.0.0.6 (X11/20070728)

Oi Tiago,

Quando ele apresentou o problema pensei no AWK também, mas ele falou que cada linha pode começar com tipo diferente... Tem como fazer isso dinamincamente, interno ao awk? Algo como redefinir a cada linha em função do primeiro campo...

Alain

Tiago Barcellos Peczenyj escreveu:
Vc poderia usar cut para pegar os caracteres de um ponto ao outro (
offset / tamanho )
Vc poderia usar expansão de variaveis para pegar os trechos ( offset / tamanho )
Vc poderia usar FIELDWIDTHS do gawk para pegar os dados da forma como vc quer:

$ cat file
0112312312312334aabbccddeeffgg20022009RSmoxxxyy666000

$ awk -v FIELDWIDTHS="2 14 14 8 2 2 3 2 6 1" '{ print "tipo = "$1",
cnpj = " $2 ", numero = "$9 }' file
tipo = 01, cnpj = 12312312312334, numero = 666000

basta vc informar a quantidade de caracteres separado por espaço (o 1
no final é bruxaria pra funcionar)

do man gawk

FIELDWIDTHS :
A  white-space separated list of fieldwidths.até
When set, gawk parses the input into fields of fixed width, instead of
using the value of the FS variable as the field separator.

Beleza?

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]