arquivo shuf - arquivo de saída: embaralhamento no local

2

O comando shuf tem um sinalizador --output que você pode usar para especificar onde gravar sua saída (em vez de gravar para stdout).

Eu quero embaralhar um arquivo no local. É seguro usar shuf file --output file , usando o mesmo nome de arquivo para o nome do arquivo de saída e o arquivo para ler?

Ou isso pode causar corrupção de arquivos? É específico da plataforma? Parece funcionar bem quando eu testei em um arquivo pequeno, mas a man page não diz nada sobre isso, e não tenho certeza se devo me preocupar com isso.

    
por D.W. 06.12.2016 / 18:46

2 respostas

2

Sim - de acordo com a documentação - deve ser seguro embaralhar um arquivo no local:

-o output-file
--output=output-file
Write output to output-file instead of standard output. shuf reads all input before opening output-file, so you can safely shuffle a file in place by using commands like shuf -o F <F and cat F | shuf -o F.

    
por 06.12.2016 / 19:06
1

Como você disse, o spot-testing em um arquivo pequeno parece fazer o que você quer, mas se você quer estar seguro, a melhor opção seria escrever em um arquivo temporário e trocar o novo em:

#!/bin/bash
scratch=$(mktemp)
trap 'rm -f "$scratch"' EXIT
if [[ -r "$1" ]]; then
    shuf "$1" --output "$scratch" && mv "$scratch" "$1"
fi

O script acima pode ser salvo como e. g. shuf_in_place no seu PATH .

    
por 06.12.2016 / 18:53