Substituir - Array de String [RESOLVIDO]

1. Substituir - Array de String [RESOLVIDO]

Alexandre Rios
alex_tj

(usa Outra)

Enviado em 12/07/2018 - 09:26h

Galera,

Queria a ajuda de vocês, se é possível fazer isso em shell ou se seria mais fácil fazer em pearl.

Tenho 2 arquivos:

- O 1º arquivo possui os registros abaixo:
0001|QUANTIDADE
0002|VALOR_TOTAL
13456|VALOR_ALÇADO

- No 2º arquivo eu tenho, apenas um array:
1|(${0001} > 0 )
2|(${0002} > ${13456} || ${0001} = 0)
3|(${0002} = ${13456})

Então preciso realizar um de-para que o meu resultado final seja o segundo arquivo interpretado em relação ao primeiro, sendo a resposta da seguinte forma:

1|(QUANTIDADE > 0)
2|(VALOR_TOTAL > VALOR_ALÇADO || QUANTIDADE = 0)
3|(VALOR_TOTAL = VALOR_ALÇADO)

Eu sei que é meio chato não colocar o que eu já tentei fazer, mas infelizmente nesse problema eu não sei nem pra onde ir, qualquer ajuda eu agradeço.


Valeu galera!



  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 12/07/2018 - 20:16h

alex_tj escreveu:

Isso, o 1º arquivo sempre estará nesse formato, mas o problema é o segundo arquivo, porque este arquivo é de domínio do meu usuário, então por exemplo, amanhã ele pode acrescentar n fórmulas para ser interpretada.

No exemplo que dei o segundo arquivo estava assim:

1|(${0001} > 0 )
2|(${0002} > ${13456} || ${0001} = 0)
3|(${0002} = ${13456})


Porém o usuário pode criar novas expressões:
1|(${0001} > 0 )
2|(${0002} > ${13456} || ${0001} = 0)
3|(${0002} = ${13456})
4|(${12345} <> -2)
5|(${0003} / ${0001} = ${0002})

no sed onde a substituição é realizada eu percebi que as variáveis são fixas:
- sed -ri 's/0001/'$var1'/;s/0002/'$var2'/;s/13456/'$var3'/' ARQ_2.txt

var1 , var2, var3 e assim sucessivamente

A questão é que não queria adicionar as variáveis na mão, queria ver uma possibilidade do próprio shell gerar essas variáveis para substituição de forma automática no arquivo 2, ou seja se meu usuário adicionar 1000 instruções novas, eu teria que inserir [o valor do Arquivo 1]/'$var4' - [o valor do Arquivo 1]/'$var5'..... e por aí vai...., e é este processo que eu gostaria que fosse automático.

Não sei se consegui explicar melhor?

Grato.


Boa noite.
Mediante o exposto...
Mudei completamente para atender a necessidade.
Segue:
while read -r line;do         #"Pega" linha por linha
IFS="|" read -a fld <<< "$line"; #Gera as variáveis(array)
sed -i "s/${fld[0]}/${fld[1]}/g" arq2; #Altera o arq2
done<arq1 #Pega as linhas do arq1


Explicando: O arq1 é lido linha a linha, são geradas as variáveis e alterado em arq2

Obs.:
Se a resposta foi esclarecedora, e resolveu o seu problema inicial....
Marque o tópico como resolvido, e eleja a MELHOR RESPOSTA...


Att.:
Marcelo Oliver

3. Re: Substituir - Array de String [RESOLVIDO]

André de Andrade Pereira
d3z40

(usa Linux Mint)

Enviado em 12/07/2018 - 09:40h

Até conseguiria fazer isso, mas em Java.
Você conhece Java? Se sim, poderia ajudá-lo.


4. Substituir - Array de String

Alexandre Rios
alex_tj

(usa Outra)

Enviado em 12/07/2018 - 09:53h

d3z40 o problema é apenas que eu uso uma ferramenta de ETL que é o Datastage 11.5 e no estágio de tarefa que essa transformação ocorre ele não aceita instruções java.
Mas mesmo assim muito obrigado pela disposição.
(y)


5. Re: Substituir - Array de String [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 12/07/2018 - 14:35h

alex_tj escreveu:

Galera,

Queria a ajuda de vocês, se é possível fazer isso em shell ou se seria mais fácil fazer em pearl.

Tenho 2 arquivos:

- O 1º arquivo possui os registros abaixo:
0001|QUANTIDADE
0002|VALOR_TOTAL
13456|VALOR_ALÇADO

- No 2º arquivo eu tenho, apenas um array:
1|(${0001} > 0 )
2|(${0002} > ${13456} || ${0001} = 0)
3|(${0002} = ${13456})

Então preciso realizar um de-para que o meu resultado final seja o segundo arquivo interpretado em relação ao primeiro, sendo a resposta da seguinte forma:

1|(QUANTIDADE > 0)
2|(VALOR_TOTAL > VALOR_ALÇADO || QUANTIDADE = 0)
3|(VALOR_TOTAL = VALOR_ALÇADO)

Eu sei que é meio chato não colocar o que eu já tentei fazer, mas infelizmente nesse problema eu não sei nem pra onde ir, qualquer ajuda eu agradeço.


Valeu galera!


Segue sugestão:
#Gera as variáveis:
eval $(awk -F"|" '{printf "var%s=%s\n" ,NR,$2}' arq1.txt)
#Substitui no arq2.txt:
sed -ri 's/0001/'$var1'/;s/0002/'$var2'/;s/13456/'$var3'/' arq2.txt

marcelo oliver


6. Substituir - Array de String

Alexandre Rios
alex_tj

(usa Outra)

Enviado em 12/07/2018 - 18:58h

Marcelo,

Obrigado, realmente o script substituiu corretamente, o único problema, e de fato a falha foi minha que não mencionei isso, é que o arquivo de varáveis, no caso o primeiro arquivo, ele é dinâmico assim como o segundo, ou seja, podem surgir novos códigos aleatórios, assim como no segundo o meu usuário pode acrescentar novas fórmulas para serem interpretadas.

Então, nesse caso eu consigo gerar as variáveis de forma dinâmica através de um while?


Grato.


7. Re: Substituir - Array de String [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 12/07/2018 - 19:13h

alex_tj escreveu:

Marcelo,

Obrigado, realmente o script substituiu corretamente, o único problema, e de fato a falha foi minha que não mencionei isso, é que o arquivo de varáveis, no caso o primeiro arquivo, ele é dinâmico assim como o segundo, ou seja, podem surgir novos códigos aleatórios, assim como no segundo o meu usuário pode acrescentar novas fórmulas para serem interpretadas.

Então, nesse caso eu consigo gerar as variáveis de forma dinâmica através de um while?
Grato.

Alex, se o arquivo com as variáveis estiver no mesmo formato do apresentado,
o comando proposto, vai gerar sem problemas...

Não entendi:
Então, nesse caso eu consigo gerar as variáveis de forma dinâmica através de um while?





8. Substituir - Array de String

Alexandre Rios
alex_tj

(usa Outra)

Enviado em 12/07/2018 - 19:35h

Isso, o 1º arquivo sempre estará nesse formato, mas o problema é o segundo arquivo, porque este arquivo é de domínio do meu usuário, então por exemplo, amanhã ele pode acrescentar n fórmulas para ser interpretada.

No exemplo que dei o segundo arquivo estava assim:

1|(${0001} > 0 )
2|(${0002} > ${13456} || ${0001} = 0)
3|(${0002} = ${13456})


Porém o usuário pode criar novas expressões:
1|(${0001} > 0 )
2|(${0002} > ${13456} || ${0001} = 0)
3|(${0002} = ${13456})
4|(${12345} <> -2)
5|(${0003} / ${0001} = ${0002})

no sed onde a substituição é realizada eu percebi que as variáveis são fixas:
- sed -ri 's/0001/'$var1'/;s/0002/'$var2'/;s/13456/'$var3'/' ARQ_2.txt

var1 , var2, var3 e assim sucessivamente

A questão é que não queria adicionar as variáveis na mão, queria ver uma possibilidade do próprio shell gerar essas variáveis para substituição de forma automática no arquivo 2, ou seja se meu usuário adicionar 1000 instruções novas, eu teria que inserir [o valor do Arquivo 1]/'$var4' - [o valor do Arquivo 1]/'$var5'..... e por aí vai...., e é este processo que eu gostaria que fosse automático.

Não sei se consegui explicar melhor?

Grato.




9. Substituir - Array de String

Alexandre Rios
alex_tj

(usa Outra)

Enviado em 12/07/2018 - 20:51h

Marcelo,

Perfeito.

Muito obrigado mesmo.



10. Re: Substituir - Array de String [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 13/07/2018 - 13:38h

alex_tj escreveu:

Marcelo,

Perfeito.

Muito obrigado mesmo.


Por nada...
Precisando....

Marcelo Oliver






Patrocínio

Site hospedado pelo provedor HostGator.
Linux banner
Linux banner
Linux banner

Artigos

Dicas

Viva o Android

Tópicos

Top 10 do mês

Scripts