|
From: | Fredi Rolf Bieging |
Subject: | Re: [shell-script] Individualizar variáveis concatenadas [o barato que sai caro] |
Date: | Wed, 30 Jul 2014 17:57:41 -0300 |
Salve guerreiros!
Estou ausente da lista faz uma era, devido a novos rumos profissionais. Entretanto, sempre sobra algo que o bom e velho shell pode fazer pela gente, mesmo quando não se é mais sysadmin. Será que ainda tem crédito na praça para receber uma ajudinha?
Tenho um arquivo .csv com várias colunas e exatas 2407 linhas. Em uma destas colunas há uma fórmula com o conteúdo parecido com a linha abaixo:
and(|CODVEND2|=146;|CODGER1|=135;|TIPOCOMISSAO|="AT";or(|CODVEND1|=6979;|CODVEND1|=174;|CODVEND1|=6069;|CODVEND1|=120;|CODVEND1|=5685;|CODVEND1|=136))
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]
- Individualizar variáveis concatenadas [o barato que sai caro], boxferrari, 2014/07/30
- Re: [shell-script] Individualizar variáveis concatenadas [o barato que sai caro], Fredi Rolf Bieging <=
- Re: [shell-script] Individualizar variáveis concate nadas [o barato que sai caro], boxferrari, 2014/07/30
- Re: [shell-script] {feedback} Individualizar variáv eis concate nadas [o barato que sai caro], boxferrari, 2014/07/31
- Prev by Date: Individualizar variáveis concatenadas [o barato que sai caro]
- Next by Date: Re: [shell-script] Individualizar variáveis concate nadas [o barato que sai caro]
- Previous by thread: Individualizar variáveis concatenadas [o barato que sai caro]
- Next by thread: Re: [shell-script] Individualizar variáveis concate nadas [o barato que sai caro]
- Index(es):