Identificar intervalo

1. Identificar intervalo

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 01/11/2017 - 16:42h

Pessoas ... tendo uma sequencias de 36 dezenas ... como identificar a sequencia do menor "01" ao maior ">06" consecutivos !!!

NOTA: esse sequencia sempre vai existir e será única ... só preciso do retorno dela

SEQ: 01 02 03 01 02 03 04 01 02 03 04 05 06 07 08 09 10 12 13 14 15 ...

Retorno >>> 01 02 03 04 01 02 03 04 05 06 07 08 09 10


OBS: se der para 1 comando melhor ainda, pois eu preciso adaptar em um script !!!



  


2. Re: Identificar intervalo

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 01/11/2017 - 17:55h

Mauriciodez escreveu:

Pessoas ... tendo uma sequencias de 36 dezenas ... como identificar a sequencia do menor "01" ao maior ">06" consecutivos !!!

NOTA: esse sequencia sempre vai existir e será única ... só preciso do retorno dela

SEQ: 01 02 03 01 02 03 04 01 02 03 04 05 06 07 08 09 10 12 13 14 15 ...

Retorno >>> 01 02 03 04 01 02 03 04 05 06 07 08 09 10


OBS: se der para 1 comando melhor ainda, pois eu preciso adaptar em um script !!!


Mauricio, não entendi!!!

Do MENOR (primeiro) "01"
Ao
MAIOR, (ultimo) "06"
O Retorno é:
01 02 03 01 02 03 04 01 02 03 04 05 06

att.:
MSO


3. Re: Identificar intervalo

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 01/11/2017 - 18:00h

msoliver escreveu:

Do MENOR (primeiro) "01"
Ao
MAIOR, (ultimo) "06"
O Retorno é:
01 02 03 01 02 03 04 01 02 03 04 05 06

att.:
MSO


do menor "01" ao ultimo "maior que 06" ... numeros consecutivos em ordem crescente !!!

no caso as sequencias que vão no maximo do 1 ao 6 serão ignoradas, assim como as não consecutivas e tb as decrecentes !!

eu preciso identificar o intervalo sacou ???

SEQ: 01 02 03 01 02 03 04 01 02 03 04 05 06 07 08 09 10 12 13 14 15 ...

Retorno >>> 01 02 03 04 01 02 03 04 05 06 07 08 09 10


------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------



4. Re: Identificar intervalo

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 01/11/2017 - 20:09h

Mauriciodez escreveu:

msoliver escreveu:

Do MENOR (primeiro) "01"
Ao
MAIOR, (ultimo) "06"
O Retorno é:
01 02 03 01 02 03 04 01 02 03 04 05 06

att.:
MSO


do menor "01" ao ultimo "maior que 06" ... numeros consecutivos em ordem crescente !!!

no caso as sequencias que vão no maximo do 1 ao 6 serão ignoradas, assim como as não consecutivas e tb as decrecentes !!

eu preciso identificar o intervalo sacou ???

SEQ: 01 02 03 01 02 03 04 01 02 03 04 05 06 07 08 09 10 12 13 14 15 ...

Retorno >>> 01 02 03 04 01 02 03 04 05 06 07 08 09 10


------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------


Boa noite Mauricio.
Segue . . .
SEQ="01 02 03 01 02 03 04 01 02 03 04 05 06 07 08 09 10 12 13 14 15 16 17 18 19 20"
N=$(awk '{print NF}' <<< "${SEQ}")
for ((x=1;x<=$N;x++));do egrep -o "$(seq -w -s" " $x)" <<< $SEQ;done|sed '/^.$/'d
01 02 03 04 05 06 07 08 09 10


MSO


5. Re: Identificar intervalo

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 01/11/2017 - 20:21h

msoliver escreveu:
Boa noite Mauricio.
Segue . . .
SEQ="01 02 03 01 02 03 04 01 02 03 04 05 06 07 08 09 10 12 13 14 15 16 17 18 19 20"
N=$(awk '{print NF}' <<< "${SEQ}")
for ((x=1;x<=$N;x++));do egrep -o "$(seq -w -s" " $x)" <<< $SEQ;done|sed '/^.$/'d
01 02 03 04 05 06 07 08 09 10


MSO


vou ver se consigo adaptar aqui .. velho ... seus scripts são complicado d+ pra eu entender ... eu preciso especificar q o bagulho vai de 01 até um limite mínimo ... que no caso eu exemplifiquei como ">6" .. onde coloco isso aí ???


------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------



6. Re: Identificar intervalo

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 01/11/2017 - 22:30h

Mauriciodez escreveu:

msoliver escreveu:
Boa noite Mauricio.
Segue . . .
SEQ="01 02 03 01 02 03 04 01 02 03 04 05 06 07 08 09 10 12 13 14 15 16 17 18 19 20"
N=$(awk '{print NF}' <<< "${SEQ}")
for ((x=1;x<=$N;x++));do egrep -o "$(seq -w -s" " $x)" <<< $SEQ;done|sed '/^.$/'d
01 02 03 04 05 06 07 08 09 10


MSO


vou ver se consigo adaptar aqui .. velho ...
seus scripts são complicado d+ pra eu entender ... eu preciso especificar q o bagulho vai de 01 até um limite mínimo ... que no caso eu exemplifiquei como ">6" .. onde coloco isso aí ???


------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------


Mauricio,
Visto que o MAXIMO é o ultimo número da sequencia, não tem como especificar.

Para especificar o MINIMO, é só fazer uma pequena alteração:
Min=5
for ((x=1;x<=$N;x++));do egrep -o "$(seq -w -s" " $Min $x)" <<< $SEQ;done|sed '/^.$/'d

##############################################################################
for ((x=1;x<=$N;x++));do egrep -o "$(seq -w -s" " $x)" <<< $SEQ;done|sed '/^.$/'d
Por partes:
N=$(awk '{print NF}' <<< "${SEQ}") # Pega a quantidade de campos da var SEQ
for ((x=1;x<=$N;x++));do #Conta de 01 até $N
$(seq -w -s" " $x) #Monta o padrão para buscar pela sequencia em $SEQ
egrep -o "$(seq -w -s" " $x)" <<< $SEQ #Busca pela sequencia
sed '/^.$/'d #Apaga linhas com um caractere
Bastante simples . . . . Rsrsrsrsrs

Att.:
MSO


7. Re: Identificar intervalo

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 01/11/2017 - 22:42h

msoliver escreveu:

Mauricio,
Visto que o MAXIMO é o ultimo número da sequencia, não tem como especificar.

Para especificar o MINIMO, é só fazer uma pequena alteração:
Min=5
for ((x=1;x<=$N;x++));do egrep -o "$(seq -w -s" " $Min $x)" <<< $SEQ;done|sed '/^.$/'d

##############################################################################
for ((x=1;x<=$N;x++));do egrep -o "$(seq -w -s" " $x)" <<< $SEQ;done|sed '/^.$/'d
Por partes:
N=$(awk '{print NF}' <<< "${SEQ}") # Pega a quantidade de campos da var SEQ
for ((x=1;x<=$N;x++));do #Conta de 01 até $N
$(seq -w -s" " $x) #Monta o padrão para buscar pela sequencia em $SEQ
egrep -o "$(seq -w -s" " $x)" <<< $SEQ #Busca pela sequencia
sed '/^.$/'d #Apaga linhas com um caractere
Bastante simples . . . . Rsrsrsrsrs

Att.:
MSO


não marcelo ... uai ... como assim apaga linhas com 1 caracterere ??? a variável SEQ vai ser um arquivo com varias linhas .. não rola d apagar nada não ... nesse caso eu não tô entendendo patavina kkk ... nem dessa explicação ( que não explicou nada .

quanto a parada da sequencia não entendi PN tb ... lembra q eu já te falei nos scripts q vc manda pra mim ... se eu não entender o q vc faz não adianta, pq vc faz de um jeito, e se eu não entender eu não consigo adaptar ao resto que tenho !!!

Trocando em miúdos .. vc se esforça para fazer scripts mirabolantes atoa !!! kkkkkkkkkkkkkkkkk

faz uma paradinha simples aí velho ... please !!!

------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------



8. Re: Identificar intervalo

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 01/11/2017 - 23:00h

Mauriciodez escreveu:

msoliver escreveu:

Mauricio,
Visto que o MAXIMO é o ultimo número da sequencia, não tem como especificar.

Para especificar o MINIMO, é só fazer uma pequena alteração:
Min=5
for ((x=1;x<=$N;x++));do egrep -o "$(seq -w -s" " $Min $x)" <<< $SEQ;done|sed '/^.$/'d

##############################################################################
for ((x=1;x<=$N;x++));do egrep -o "$(seq -w -s" " $x)" <<< $SEQ;done|sed '/^.$/'d
Por partes:
N=$(awk '{print NF}' <<< "${SEQ}") # Pega a quantidade de campos da var SEQ
for ((x=1;x<=$N;x++));do #Conta de 01 até $N
$(seq -w -s" " $x) #Monta o padrão para buscar pela sequencia em $SEQ
egrep -o "$(seq -w -s" " $x)" <<< $SEQ #Busca pela sequencia
sed '/^.$/'d #Apaga linhas com um caractere
Bastante simples . . . . Rsrsrsrsrs

Att.:
MSO


não marcelo ... uai ... como assim apaga linhas com 1 caracterere ??? a variável SEQ vai ser um arquivo com varias linhas .. não rola d apagar nada não ... nesse caso eu não tô entendendo patavina kkk ... nem dessa explicação ( que não explicou nada .

quanto a parada da sequencia não entendi PN tb ... lembra q eu já te falei nos scripts q vc manda pra mim ... se eu não entender o q vc faz não adianta, pq vc faz de um jeito, e se eu não entender eu não consigo adaptar ao resto que tenho !!!

Trocando em miúdos .. vc se esforça para fazer scripts mirabolantes atoa !!! kkkkkkkkkkkkkkkkk

faz uma paradinha simples aí velho ... please !!!

------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------

como assim apaga linhas com 1 caracterere ???
Teste sem o sed e descobrira!!!!!
faz uma paradinha simples aí velho ... please !!!
Faço PN!!!
Beleza então Mauricio . . . .
Se VIRE!!!! rsrsrsrs
MSO



9. Re: Identificar intervalo

Paulo
paulo1205

(usa Ubuntu)

Enviado em 02/11/2017 - 05:21h

Mauriciodez escreveu:

Trocando em miúdos .. vc se esforça para fazer scripts mirabolantes atoa !!! kkkkkkkkkkkkkkkkk

faz uma paradinha simples aí velho ... please !!!


O que você pediu não é simples, mesmo que pareça. E não é uma coisa que se faça todo dia de maneira uniforme, então não tem ferramenta pronta para isso.

Pare e pense sobre como VOCÊ, usando apenas sua própria mente e eventualmente um lápis e um papel, faria para identificar a sequência mais longa, do jeito como você descreveu o problema, e depois tente descrever o processo em termos de instruções, como se você fosse ensinar outra pessoa (ou uma máquina) a fazer. (Em tempo: essas instruções são chamadas de “programa”.) Você verá que não é tão trivial assim.


10. Re: Identificar intervalo

Paulo
paulo1205

(usa Ubuntu)

Enviado em 02/11/2017 - 05:36h

#!/bin/bash

min_tam_aceitavel=$1

max_seq=0

tam_seq=0
while read n; do
if (( n == 1 )); then
tam_seq=1
elif (( tam_seq > 0 )); then
(( tam_seq++ ))
if (( n != tam_seq )); then
tam_seq=0
elif (( tam_seq > max_seq )); then
(( max_seq = tam_seq ))
fi
fi
done

if (( min_tam_aceitavel <= max_seq )); then
seq -w -s ' ' 01 $max_seq
exit 0
fi
exit 1



11. Re: Identificar intervalo

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 03/11/2017 - 14:01h

paulo1205 escreveu:

Mauriciodez escreveu:

Trocando em miúdos .. vc se esforça para fazer scripts mirabolantes atoa !!! kkkkkkkkkkkkkkkkk

faz uma paradinha simples aí velho ... please !!!


O que você pediu não é simples, mesmo que pareça. E não é uma coisa que se faça todo dia de maneira uniforme, então não tem ferramenta pronta para isso.

Pare e pense sobre como VOCÊ, usando apenas sua própria mente e eventualmente um lápis e um papel, faria para identificar a sequência mais longa, do jeito como você descreveu o problema, e depois tente descrever o processo em termos de instruções, como se você fosse ensinar outra pessoa (ou uma máquina) a fazer. (Em tempo: essas instruções são chamadas de “programa”.) Você verá que não é tão trivial assim.


Né não velho ... eu sei q as paradas as vezes não são simples ... mais o marcelo me entende quando eu fico com essa zueira .... é q sou bem cabação e o marcelo saca muito ... então as vezes o que é simples pra ele é bem complicado pra mim ....

então é assim ... como é simples pra vc's, vc's se esforçam tb para fazer o mais elegante possível ...eu tb faço ( quando eu sei ) o mais chique possível ... no mais ( só pra constar ) , não foi uma reclamação ... foi só um pedido carinhoso ... as vezes a comunicação escrita não condiz em nada com a nossa intonação.

Vc's sabem que agradeço de coração a toda ajuda que recebo !!

Abçs.

OBS: não vou testar os códigos pq estou em BH e meu computador ficou em Brasilia. quando testar dou retorno !!!


------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------



12. Re: Identificar intervalo

Lui
drizze

(usa Linux Mint)

Enviado em 03/11/2017 - 14:44h

A ideia do msoliver foi genial, mas não resolve esse problema, pois ele mexeu na sequência e não pode. Pelo que entendi, precisa pegar as sequências que contenha o menor número nelas e que essa mesma sequência seja maior que 06. Outro detalhe importante é que precisam ser consecutivos, não pode conter número repetido.

Então se eu tenho essa seguinte sequência:
02 02 03 04 05 06 07 01 02 03 04 05 06 07 08 09 10 11 12 05 06 07 01 02 03 04 05 06 07


Creio que deverão ser impressos apenas essas 2 sequências:

01 02 03 04 05 06 07 08 09 10 11 12
01 02 03 04 05 06 07


Estou correto?

No exemplo do seu primeiro post, nos dá o retorno de 01 ao 10, porém, vai até o 15.



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts