cat /dev/urandom | tr -dc '0-1'
é uma maneira terrivelmente lenta de obter números aleatórios - você está descartando muitos dados apenas porque não faz a análise de um número ASCII.
Você pode usar od
ou hexdump
para converter os dados em números, em vez disso, talvez awk
para substituir o terceiro campo:
$ awk -v cmd="od -t u2 -A n /dev/urandom | tr -d ' \n' | fold -w 48" '{cmd | getline a; $3=a}1' foo
a b 544404963198532458179603539139474299576034345258
a b 288743886427692659230387417952036728563243415446
a b 862132599821016414678116482868514114597223157825
a b 033164829235119519053106724136729063192651002644
a b 344594724128550250448115260033862902855932105599
a b 312488113115218631189450762993316672549312384472
a b 536218132619476215470461793189974621744028599402
a b 312943765306550325469516346331872556359574159859
a b 530561655804530239462031928466172515137971221356
a b 295271911741933346066441964722122556255551414840
od -t u2 -A n /dev/urandom | tr -d ' \n' | fold -w 48
converte os dados aleatórios em% de dois bytesunsigned int
s, então usamos tr
para remover os espaços da saída de od
.
awk
é muito bom para o processamento de texto baseado em colunas. O método <command> | getline
permite executar o <command>
uma vez e, em seguida, leia sua saída para a duração do comando awk
.
Uma maneira mais simples do que forçar a saída od
para o formato necessário é usar hexdump
:
hexdump -e '"%u"' /dev/urandom | fold -w 48