Geração de caracteres aleatórios - com saída aleatória!

2

É isso que a crise pode gerar:

[user@localhost ~] crunch 3 3 ab
Crunch will now generate the following amount of data: 32 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 8 
aaa
aab
aba
abb
baa
bab
bba
bbb
[user@localhost ~] 

Mas há alguma solução que seja igual à crunch, a única diferença é que as saídas são aleatórias?

[user@localhost ~] SOMEMAGIC 3 3 ab
bba
bab
abb
aaa
bbb
aab
baa
aba
[user@localhost ~] 

usando um método "sort -R" não é bom! Porque a solução precisa ser "on the fly"

    
por somelooser28533 17.10.2014 / 19:24

3 respostas

1

Crítica de imitação

Algo parecido com isto irá gerar todas as permutações do conjunto {a, b} @ 3 strings longas, e irá embaralhar a saída usando shuf .

$ printf "%s\n" {a..b}{a..b}{a..b} | shuf
bbb
aab
abb
bba
baa
aba
bab
aaa

Isso não é diferente do que usar sort -R .

Escondendo a randomização

Se você pretende ocultar a interface para que você dê a scriptX uma lista de argumentos e retornar uma lista aleatória semelhante a crunch , então agrupar isso em um alias ou em um script de shell faria o trabalho . Você pode colocar o seguinte em um script chamado mycrunch.bash :

#!/bin/bash

crunch "$1" "$2" "$3" | sort -R

Marque como executável:

$ chmod +x mycrunch.bash

E corra assim:

$ ./mycrunch.bash 3 3 ab

Filtrando a saída crus do falso

Você pode usar o comando grep no script acima para filtrar essas linhas da seguinte forma:

crunch "$1" "$2" "$3" | grep -vE "Crunch|0" | sort -R

Isso irá omitir todas as linhas que contenham as strings "Crunch" ou "0".

    
por 17.10.2014 / 19:58
0

Bem, você poderia simplesmente canalizar tudo depois da linha de saída que começa com 'Crunch will now' através da ordenação -R. Assim:

crunch 3 3 ab| sed -e '0,/^Crunch will now/d' | sort -R

Ainda não tenho certeza se isso conta como 'on the fly', no entanto.

    
por 17.10.2014 / 20:43
0

But are there any solutions that is the same as crunch, the only difference is that is randomly outputs the lines?

Não.

Esse problema pode ser resolvido apenas em duas etapas:

  1. Crie todas as combinações possíveis
  2. Gerar permutação aleatória de resultado

Você não pode fazer as duas coisas ao mesmo tempo, pelo menos não com um único algoritmo para criar combinações. Você precisaria ter algoritmos diferentes e, no início do programa, escolher um aleatoriamente, cuidando para que os resultados finais desses diferentes algoritmos sejam distribuídos uniformemente.

De qualquer forma, duvido que você encontre algo simples , muito diferente de crunch + sort -R .

    
por 17.10.2014 / 23:04

Tags