¿Por qué las opciones de clasificación -c (verificar si están ordenadas) y -o (escribir en el archivo de salida) no son compatibles?

¿Por qué las opciones de clasificación -c (verificar si están ordenadas) y -o (escribir en el archivo de salida) no son compatibles?

Estoy ordenando una gran cantidad de archivos uno tras otro. Usando sort -o file file. El bucle for se detuvo a mitad de camino y antes de reiniciar quiero usar -cla opción de clasificación para acelerar la clasificación. Pero dice que -colas opciones no son compatibles. ¿Por que es esto entonces?

sort --version
sort (GNU coreutils) 8.13

OS: Ubuntu 12.10

Respuesta1

Porque le está diciendo que solo desea verificar cuál no genera salida y también especifica que desea que la salida ordenada vaya a un archivo determinado. Estos son conceptos mutuamente excluyentes y se aplican en sort.c (gnu coreutils 8.20) con

  if (checkonly)
    {

      if (outfile)
        {
          static char opts[] = {0, 'o', 0};
          opts[0] = checkonly;
          incompatible_options (opts);
        }

Respuesta2

Suponiendo que esté utilizando GNU sort, las opciones que menciona son:

   -c, --check, --check=diagnose-first
          check for sorted input; do not sort
   -o, --output=FILE
          write result to FILE instead of standard output

La -cbandera simplemente le informará si la entrada ya está ordenada o no:

$ echo -e "A\nB\nC" | sort -c
$ echo -e "A\nC\nB" | sort -c
sort: -:3: disorder: B

Entonces, si la entrada está ordenada, no se imprime nada y si la entrada no está ordenada, se imprime un mensaje de error con el error estándar. En otras palabras, sort -cnunca imprime en la salida estándar. Como nunca imprime, no tiene mucho sentido redirigir su salida.

Respuesta3

sort -c nunca produce resultados. Sólo comprueba el archivo. Sin resultados, no hay razón para escribirlos en un archivo. Entonces, incompatible con -o.

Podrías usar -c como una especie de verificación de un archivo antes de ordenarlo, pero no estoy seguro de que eso acelere las cosas como deseas.

Respuesta4

Hay una gran diferencia entre comprobar si un archivo está ordenado y ordenarlo.

Al verificar, en el mejor de los casos dos entradas son suficientes (bastante rápido), en la primera entrada que no está ordenada el comando puede salir y se realiza la verificación, pero en este punto la salida estaría incompleta, el peor caso es cuando el archivo está ordenado (sólo en este caso la salida tendría sentido).

Si tiene muchos archivos para ordenar y los interrumpe con frecuencia, probablemente debería realizar un seguimiento de alguna manera de los archivos terminados antes de volver a ordenarlos.

información relacionada