Recuperar um valor específico de uma string [RESOLVIDO]

1. Recuperar um valor específico de uma string [RESOLVIDO]

Alexandre Rios
alex_tj

(usa Outra)

Enviado em 10/07/2017 - 12:48h

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.



  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 10/07/2017 - 13:10h

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


3. Recuperar um valor específico de uma string

Alexandre Rios
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ç.


4. Re: Recuperar um valor específico de uma string [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 10/07/2017 - 15:12h

alex_tj escreveu:

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ç.


Boa tarde alex.
Só alterar a REGEX . . .
grep -o 'DT_MVM IN \([0-9, ]+\)' 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)|3


Se a resposta foi satisfatória, marque o tópico como resolvido....
E se, gostou da minha resposta, marque a como "A MELHOR", assim sou pontuado, o que incentiva a continuar colaborando . . .

Abç.:
Marcelo Oliver



5. Recuperar um valor específico de uma string

Alexandre Rios
alex_tj

(usa Outra)

Enviado em 10/07/2017 - 15:15h

msoliver escreveu:

alex_tj escreveu:

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ç.


Boa tarde alex.
Só alterar a REGEX . . .
grep -o 'DT_MVM IN \([0-9, ]+\)' 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)|3


Se a resposta foi satisfatória, marque o tópico como resolvido....
E se, gostou da minha resposta, marque a como "A MELHOR", assim sou pontuado, o que incentiva a continuar colaborando . . .

Abç.:
Marcelo Oliver


Perfeito meu amigo. Abraço.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts