Eu não sei se existe um método mais elegante, mas isso funciona para mim:
mkfifo onerandom tworandom threerandom
tee onerandom tworandom threerandom < /dev/urandom > /dev/null &
shuf --random-source=onerandom onefile > onefile.shuf &
shuf --random-source=tworandom twofile > twofile.shuf &
shuf --random-source=threerandom threefile > threefile.shuf &
wait
Resultado:
$ head -n 3 *.shuf
==> onefile.shuf <==
24532 one
47259 one
58678 one
==> threefile.shuf <==
24532 three
47259 three
58678 three
==> twofile.shuf <==
24532 two
47259 two
58678 two
Mas os arquivos devem ter exatamente o mesmo número de linhas.
A documentação do GNU Coreutils também fornece uma boa solução para aleatoriedade repetida usando openssl
como um gerador aleatório semeado:
https://www.gnu.org/software/coreutils/manual/html_node/Random-sources.html#Random-sources
get_seeded_random() { seed="$1" openssl enc -aes-256-ctr -pass pass:"$seed" -nosalt \ </dev/zero 2>/dev/null } shuf -i1-100 --random-source=<(get_seeded_random 42)
No entanto, considere o uso de uma semente melhor que "42", a menos que você queira que qualquer outra pessoa seja capaz de reproduzir "seu" resultado aleatório também.