Como embaralhar arquivos de texto grandes com eficiência enquanto os canaliza no Linux?

Como embaralhar arquivos de texto grandes com eficiência enquanto os canaliza no Linux?

Eu tenho um arquivo de texto com alguns GBs. Estou tentando embaralhar esse arquivo de texto em um pipe.

Por exemplo, estes são alguns exemplos de linhas do que estou usando, mas não são eficientes e, na verdade, o pipe não parece iniciar até que todo o arquivo seja lido. Talvez eu esteja errado nisso.

shuf HUGETEXTFILE.txt|some command

cat HUGETEXTFILE.txt|sort -R |some command

Eu também tentei usar

split -n 1/numberofchunks HUGETEXTFILE.txt|sort -R|some command 

Mas a tubulação termina quando o primeiro pedaço termina.

Estou tentando encontrar uma maneira eficiente de canalizar arquivos de texto embaralhados em um canal, porque não quero escrever centenas de arquivos sempre que precisar de uma nova maneira de embaralhar ou distribuir aleatoriamente.

obrigado

Responder1

Você pode tentar esta abordagem:

cat bigfile.txt|
  while IFS= read -r line; do
    echo '%s\n' "$line" |shuf |sort -n| grep "sample";
  done

IFS é usado para dividir a saída em linhas aqui.

informação relacionada