|
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
[Prev in Thread] | Current Thread | [Next in Thread] |