Ordem numérica [RESOLVIDO]

1. Ordem numérica [RESOLVIDO]

Geraldo Augusto de Oliveira Quites
geraldoquites

(usa Suse)

Enviado em 28/12/2012 - 14:57h

Tenho um arquivo com uma sequencia numérica e ordenada de 1 a 100.000, só que faltam alguns números nesta sequencia. Eu conseguiria criar um script para gerar um novo arquivo com esses números faltantes?

Obrigado.

Geraldo.


  


2. MELHOR RESPOSTA

Danilo Josino
djosino

(usa Ubuntu)

Enviado em 28/12/2012 - 17:29h

numeros
1
2
7
8

teste.sh

#!/bin/bash

for i in {1..10}; do
exist=$(cat numeros | grep ^$i$ | wc -l);
if [ $exist -eq 0 ]; then
echo $i >> new_file;
fi;
done;



3. Re: Ordem numérica [RESOLVIDO]

alvaronet
alvaronet

(usa Fedora)

Enviado em 28/12/2012 - 18:20h

Se puder simplesmente recriar o arquivo:

seq 1000 > numeros.txt


4. Re: Ordem numérica [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 28/12/2012 - 18:22h

geraldoquites escreveu:

Tenho um arquivo com uma sequencia numérica e ordenada de 1 a 100.000, só que faltam alguns números nesta sequencia. Eu conseguiria criar um script para gerar um novo arquivo com esses números faltantes?


Essa é fácil, e a resposta é: provavelmente sim, você conseguiria.

Falando seriamente, acho que o espírito da comunidade não é que resolvam exercícios por você, mas que você possa tirar dúvidas específicas com as quais possa ter se deparado ao tentar fazer alguma coisa.

Vi que alguém já deu uma solução. Provavelmente funciona, mas é extremamente ineficiente. Recomendo que você não a utilize, e que "queime um pouco os neurônios" buscando uma solução melhor (uma solução muito boa pode ser feita em apenas dez linhas, usando somente os comandos internos do shell e duas variáveis).


5. Re: Ordem numérica [RESOLVIDO]

Geraldo Augusto de Oliveira Quites
geraldoquites

(usa Suse)

Enviado em 28/12/2012 - 19:43h

Falando seriamente, acho que o espírito da comunidade não é que resolvam exercícios por você, mas que você possa tirar dúvidas específicas com as quais possa ter se deparado ao tentar fazer alguma coisa.

Caro Paulo, não entendi muito bem o tom da sua resposta. Se você acha SERIAMENTE, que tenho este tipo de intenção (que resolvam questões gratuitas por mim), você está redondamente engando.

Quando fiz a solicitação de ajuda, foi porque já fiz as minhas pesquisas, pobres ou não e não consegui uma resposta favoravel.

Faço parte desta louvável organização chamada VIVA O LINUX e nunca me deparei com uma resposta deste tipo. Se você não acha justo a resposta de minha pergunta, silencie-se, mas não me magõe com tal expressão.

Sim, sou um mero iniciante, como acredito que você um dia foi também, e o fato de você talvez não ter feito perguntas tão inocentes quanto as minhas, não lhe dá o direito de mostrar em público a minha incapacidade no assunto.

Tenha um feliz ano ano novo.


6. Re: Ordem numérica [RESOLVIDO]

M4iir1c10
m4iir1c10

(usa Arch Linux)

Enviado em 28/12/2012 - 20:23h

Tenta isso e me avise se e isso que voce quer dizer:

awk 'NR-1{if($1!=(_+1))print _}{_=$1}' arquivo.txt


7. Re: Ordem numérica [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 29/12/2012 - 04:52h

Caro Geraldo,

Por favor, fique calmo.

Como nenhum de nós tem como adivinhar o que estava na sua mente na hora em que você fez sua pergunta original -- só podemos julgar o que foi escrito --, eu peço que você releia a pergunta que fez usando apenas as palavras que nela estão, despindo-se de qualquer outra ideia que você possa ter tido antes ou durante sua formulação.

Veja que literalmente você está pedindo que se julgue se você é capaz ou não de fazer um script. Como alguém que não o conhece pode responder a esse tipo de pergunta de forma objetiva?

Agora veja as respostas que teve. A primeira foi uma solução pronta e aparentemente correta, mas ineficiente. A segunda foi outra solução pronta, mas para outro problema diferente do seu. A quarta foi mais uma solução pronta, mas desnecessariamente obscura e que não faz qualquer coisa parecida com o que você enunciou.

Se você não queria resposta pronta, parabéns sinceros para você. Só que ninguém conseguiu entender isso a partir de suas palavras.

O único que respondeu ao que você perguntou (o "eu conseguiria criar?") fui eu, com uma resposta séria, não jocosa nem irônica, às palavras que você usou. Mas como é difícil crer que a informação que você queria era aquela, e como o tipo de resposta que os outros estavam lhe dando era no sentido de resolver o problema por você, eu entendi que deveria alertar não apenas você, mas também quem estava lhe dando scripts ou programas prontos, de que esse não é o espírito que _EU_ entendo ser o da comunidade (mas eu admito que posso muito bem estar enganado -- não fui eu quem a criou, não sou seu dono, nem dono do VoL, mas somente um usuário como você e todos os demais --, e a comunidade pode mesmo ter o objetivo de ajudar alunos a fraudar seus trabalhos acadêmicos e profissionais incompetentes a passar por coitadinhos e a explorar jovens incautos e ansiosos para mostrar conhecimento -- e, nesse caso, quem tem de deixar a comunidade sou eu).

Não usei uma palavra rude nem fiz acusações, mas sugeri que você fosse mais específico nas suas perguntas, a fim de receber ajuda de melhor qualidade. E não apenas isso: eu dei a você dicas bem objetivas: que uma das soluções mostradas parecia correta, mas que tinha problema de eficiência (a saber: chamar o grep dentro de um loop, sobre o mesmo arquivo já ordenado, lendo-o inteiro até 100000 vezes para extrair no máximo uma linha de cada vez), e que você poderia produzir exatamente o mesmo resultado de modo muito mais eficiente, usando apenas comandos internos do bash e duas variáveis (e -- acrescento agora -- lendo o arquivo apenas uma vez), tudo isso em exatas dez linhas.

Mais dicas do que isso, só se eu mostrar para você uma solução pronta. Só que eu não vou fazer isso e, pelo que você disse, também não é o que você quer.

Agora olhe novamente a sua resposta dirigida a mim. Quem julgou o outro? E quem sugeiriu ao outro que se calasse?

Não fui eu, antes, e não serei eu, agora.

Embora eu, como qualquer outra pessoa, tenha cá minhas vaidades, meu objetivo aqui não é gabar-me nem, muito menos, humilhar quem quer que seja -- até porque, para me gabar, seria muito mais fácil dar, de bandeja, soluções prontas, e, aliás, do tipo "quanto mais rebuscadas, melhor, para todo mundo achar que eu sou 'o cara'". Acredite que eu estou aqui para ajudar quem eu acho que posso ajudar.

Se você queria saber qual o tom de minha peimeira mensagem, pode ter certeza de que é o mesmo desta: direto, honesto e respeitoso, e sempre procurando dar informações úteis, que se tornem conhecimento ou até mesmo sabedoria para quem vier a ler.

Votos de que você e todos os seus tenham um excelente 2013.


8. Re: Ordem numérica [RESOLVIDO]

Geraldo Augusto de Oliveira Quites
geraldoquites

(usa Suse)

Enviado em 29/12/2012 - 11:38h

Djosino, seu script funcionou perfeitamente. Agradeço a sua ajuda.

Explicando aqui a minha necessidade.

Fiquei responsável de criar um banco de dados em mysql com todas possíveis combinações da megasena que somam 50.063.800 possibilidades.

Criei um script que tinha linha principal:
shuf -i 1-60 -n 6|sort -g |sed ':a;$!N;s/\n/-/g;ta' >> megasena.txt

Coloquei um loop e ele ficava criando as possibilidades, só que muitas dezenas ficavam repetidas.

Ai criei um outro script que verificava os repetidos, eliminava-os e gerava um outro arquivo ordenado:
/bin/cat megasena.txt | sort -g | uniq > mega.txt

Só que, com o passar do tempo o arquivo ia ficando muito grande e consequentemente lento e o pior, as dezenas incluídas iam ficando cada vezes menores.

Ontem meu arquivo chegou a ficar com 50.063.350 combinações, foi ai que achei viável trabalhar de ordem inversa. Não incluir os números no arquivo e sim verificar dentro deste, quais números estavam faltando.

A título de orientação, com os comandos abaixo, faço a inserção de dados no mysql:
- mysql -u root -p'senha' -e 'CREATE TABLE mega(numeros VARCHAR(17) NOT NULL, id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY )' mega_sena

- mysqlimport -u root -p'senha' --local mega_sena mega.txt


Testei seu script num arquivo menor e funcionou perfeitamente, agora testarei no meu arquivo principal.

Sei eu poderia ter conseguido gerar esse arquivo de forma muito mais rápida e eficiente, mas ainda chego lá.. rs rs...

Agradeço a todos que colaboraram com suas respostas.

Feliz 2013 a todos.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts