Estou classificando um grande número de arquivos, um após o outro. Usando sort -o file file
. O loop for foi interrompido no meio do caminho e, antes de reiniciar, quero usar -c
a opção de classificação para acelerar a classificação. Mas diz que as -co
opções não são compatíveis. Por que é tão?
sort --version
sort (GNU coreutils) 8.13
OS: Ubuntu 12.10
Responder1
Porque você está dizendo que deseja apenas --check que não gera saída e também especifica que deseja que o --output classificado vá para um determinado arquivo. Esses são conceitos mutuamente exclusivos e são aplicados em sort.c (gnu coreutils 8.20) com
if (checkonly)
{
…
if (outfile)
{
static char opts[] = {0, 'o', 0};
opts[0] = checkonly;
incompatible_options (opts);
}
Responder2
Supondo que você esteja usando GNU sort
, as opções mencionadas são:
-c, --check, --check=diagnose-first
check for sorted input; do not sort
-o, --output=FILE
write result to FILE instead of standard output
O -c
sinalizador apenas informará se a entrada já está classificada ou não:
$ echo -e "A\nB\nC" | sort -c
$ echo -e "A\nC\nB" | sort -c
sort: -:3: disorder: B
Portanto, se a entrada for classificada, nada será impresso e se a entrada não for classificada, uma mensagem de erro será impressa no erro padrão. Em outras palavras, sort -c
nunca imprime na saída padrão. Como nunca é impresso, não faz muito sentido redirecionar sua saída.
Responder3
sort -c nunca produz saída. Ele apenas verifica o arquivo. Sem saída, não há razão para gravá-la em um arquivo. Portanto, incompatível com -o.
Você poderia usar -c como uma espécie de verificação de um arquivo antes de classificá-lo, mas não tenho certeza se isso realmente aceleraria as coisas como você deseja.
Responder4
Há uma grande diferença em verificar se um arquivo está classificado e classificá-lo.
Ao verificar, na melhor das hipóteses duas entradas são suficientes (bem rápido), na primeira entrada que não está ordenada o comando pode sair e a verificação é feita, mas neste ponto a saída estaria incompleta, o pior caso é quando o arquivo é classificado (somente neste caso a saída faria sentido).
Se você tiver muitos arquivos para classificar e interromper frequentemente, provavelmente você deve acompanhar de alguma forma os arquivos concluídos antes de classificar novamente.