permutação aleatória de linhas de texto

5

Se eu tiver um arquivo com o seguinte conteúdo:

0001
0002
0003
0004
0132
0137
0138
0141

Como posso obter uma permutação aleatória deles em bash?

    
por Tim 09.11.2014 / 20:43

2 respostas

13

shuf é o comando que você está procurando.

De man shuf ,

-n, --head-count=COUNT output at most COUNT lines

Então, por exemplo, para obter 4 linhas aleatórias do arquivo, você poderia usar o comando como

shuf -n 4 file

Você pode até usar a abordagem abaixo.

head -$((${RANDOM} % 'wc -l < file' + 1)) file | tail -1

Onde, o pipe final para a cauda irá especificar o número de linhas que você precisa na saída.

Referências

link

    
por 09.11.2014 / 20:46
9

Você pode fazer isso com coreutils ' sort com qualquer um dos seguintes itens:

sort -R file
sort --random-sort file
sort --sort=random file

de man sort :

  -R, --random-sort
          sort by random hash of keys

   --sort=WORD
          sort according to WORD: general-numeric -g, human-numeric -h, month
          -M, numeric -n, random -R, version -V
    
por 09.11.2014 / 21:04