alex_tj
(usa Outra)
Enviado em 10/07/2017 - 14:24h
msoliver escreveu:
alex_tj escreveu:
Galera, estou precisando de uma ajuda.
Tenho um arquivo em que o seu conteúdo são diversas queries realizadas em um banco de dados, e preciso imprimir a quantidade de incidências de uma determinada string por exemplo
ID|QUERY
1|SELECT * FROM TAB_X WHERE DT_MVM IN (2015, 2016, 2017)
2|SELECT DS_AN, DS_MM FROM TAB_X WHERE DT_MVM IN (2015)
3|SELECT DS_AN, DS_MM FROM TAB_Z WHERE DT_MVM IN (2013,2014,2015,2016,2017)
4|SELECT * FROM TAB_Y WHERE DT_MVM IN (2015, 2016, 2017)
E o resultado final deve ser:
FILTRO|QUANTIDADE
DT_MVM IN (2015, 2016, 2017)|2
DT_MVM IN (2015)|1
DT_MVM IN (2013,2014,2015,2016,2017)|1
Ou seja, o início deve ser onde a string inicia com DT_MVM e finaliza até a ocorrência do ")" - parênteses de fechamento.
Tentei usar o cut, o sed, expressões regulares, mas infelizmente não consegui nem chegar perto da resposta.
Se puderem me ajudar ficaria mto grato.
Valeu galera.
Boa tarde.
Segue sugestão:
grep -o 'DT.*$' ARQUIVO |sort|uniq -c|sed 's/[ ]\+//'|sed -r 's/([0-9] )(DT_.*)/\2\|\1/'
DT_MVM IN (2013,2014,2015,2016,2017)|1
DT_MVM IN (2015)|1
DT_MVM IN (2015, 2016, 2017)|2
Tá bem perto da resposta . . . :)
Att.:
Marcelo Oliver
Marcelo,
Boa tarde,
Valeu demais aí pela ajuda, a resposta já me ajudou bastante, mas se vc puder me ajudar só com mais uma questão que eu não tinha me atentado e infelizmente só para esses casos que a resposta não funcionou, mas aí fui eu quem não passou a informação correta.
Dentro desse mesmo arquivo peguei uma situação meio inusitada que foi a do ID 5
ID|QUERY
1|SELECT * FROM TAB_X WHERE DT_MVM IN (2015, 2016, 2017)
2|SELECT DS_AN, DS_MM FROM TAB_X WHERE DT_MVM IN (2015)
3|SELECT DS_AN, DS_MM FROM TAB_Z WHERE DT_MVM IN (2013,2014,2015,2016,2017)
4|SELECT * FROM TAB_Y WHERE DT_MVM IN (2015, 2016, 2017)
5|SELECT T.DT_AN, Y.DT_MM FROM (SELECT ID, DT_AN FROM TAB_T WHERE DT_MVM >= '2013-01-01') AS T INNER JOIN TAB_Y AS Y ON T.ID = Y.ID WHERE Y.DT_MVM IN (2015, 2016, 2017)
Sei que estou abusando da boa vontade, mas se puder me ajudar mais uma vez ficarei agradecido, mas já estou me baseando na sua primeira resposta pra ter um norte.
A saída do arquivo permanece igual ao exemplo que dei.
FILTRO|QUANTIDADE
DT_MVM IN (2013,2014,2015,2016,2017)|1
DT_MVM IN (2015)|1
DT_MVM IN (2015, 2016, 2017)|3
Muito obrigado.
Abç.