Por que as opções de classificação -c (verificar se classificado) e -o (gravar no arquivo de saída) não são compatíveis

Por que as opções de classificação -c (verificar se classificado) e -o (gravar no arquivo de saída) não são compatíveis

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 -ca opção de classificação para acelerar a classificação. Mas diz que as -coopçõ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 -csinalizador 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 -cnunca 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.

informação relacionada