|
From: | boxferrari |
Subject: | Individualizar variáveis concatenadas [o barato que sai caro] |
Date: | 30 Jul 2014 13:46:44 -0700 |
Notem que os ";" desta linha não são os separadores de colunas do arquivo, mas sim parte do conteúdo da tupla.
Notem também que o conteúdo acima é uma operação de comparação que (em SQL, por exemplo) seria lida mais ou menos assim:
<code>
(...)
where
CODVEND2=146 and
CODGER1=135 and
TIPOCOMISSAO="AT" and
(
(CODVEND1=6979) or
(CODVEND1=174) or
(CODVEND1=6069) or
(CODVEND1=120) or
(CODVEND1=5685) or
(CODVEND1=136)
)
</code>
O que eu preciso fazer usando shell é reescrever o conteúdo desta variável eliminado a condicional OR, ou seja, criando uma nova linha para cada ocorrência de CODVEND1 com um único teste desta variável. Preciso ter uma linha com o teste do valor 6979, outra linha testando o valor 174 e assim por diante (até testar os 6 valores possíveis para a variável CODVEND1).
O primeiro problema é que a quantidade de valores possíveis para CODVEND1 (no exemplo são 6) é variável, podendo ser 1, 2, 3, ..., n ou até mesmo nenhum.
Assim, o que eu gostaria é uma maneira de ler cada uma das 2407 linhas do arquivo e, para cada ocorrência da variável CODVEND1, replicar a linha acrescentando no fim dela o valor que sucede o sinal de "=" imediatamente após o texto |CODVEND1|.
Minha dificuldade NÃO está em localizar a ocorrência de CODVEND1, nem casar o valor atribuído a ele, muito menos em replicar a linha acrescentando tal valor ao final.
A questão é como montar o loop dentro de cada linha, que faça avance a cada nova ocorrência de CODVEND1 e que saida dela (indo para a próxima linha) quando não encontar mais nenhum CODVEND1 naquela linha.
O segundo problema é que nem sempre todos os CODVEND1 estão na sequência um do outro, podendo ocorrer um no ínício do texto e outro no final, com outras comparações entre eles.
Alguém pode me dar uma ideia de quais meios posso usar para fazer isso?
Abraço
Cristiano P. Ferrari
PS: para quem quizer saber o porquê do "barato sai caro" no título da mensagem, a razão é que o para economizar a repetição dos testes (um para cada variação no CODVEND1), no passado o estúpido teve a estapafúrdia ideia de agrupar os mesmos testes condicionais onde somente variava o CODVEND1, criando esse monde de OR. Agora, a quatindade de registros cresceu e o gerenciamento se tornou-se simplesmente impraticável e tenho que "desaninhar" para conseguir dar manutenção nas regras representadas por estes testes.
[Prev in Thread] | Current Thread | [Next in Thread] |