Solía commcomparar dos archivos ordenados. Cada línea en estos archivos son números enteros positivos. Pero los resultados muestran
comm: file 1 is not in sorted order
comm: file 2 is not in sorted order
¿Cómo es que el error incluso si estos dos archivos están ordenados?
sort
comm
numeric-data
Wenzi
fuente
fuente

Respuestas:
commrequiere ordenación lexicográfica (simplesort), no ordenación numérica (sort -n). Por ejemplo, quiere el siguiente orden:No es el siguiente orden:
Corrija esto y el problema debería desaparecer. Para los casos más esotéricos, donde
comm's local puede ser diferente de lasortconfiguración regional, es posible que desee ejecutarsortycommconLC_COLLATE=Cen su entorno para utilizar el orden de bytes nativo.fuente
sort -nsortcon y sin el-ninterruptor y demuestra solo con el-ninterruptor que puede lograr el orden creciente correcto que reconoce que se requiere en su propia respuesta.commliteralmente requiereLC_COLLATEd ordenar. Baste decir que los errores en su respuesta no son puramente cosméticos para ejemplos fuera de su conjunto de pruebas ... nadie solicitó una clasificación numérica positiva.RESPUESTA ACTUALIZADA:
PROBLEMA:
El OP está recibiendo un error sobre "el archivo no está en orden " cuando se usa
commpara comparar enteros positivos en los archivos, no texto. Entonces estamos tratando con números no decimales.Respuesta corta:
Dependiendo del uso del
-ninterruptor con elsortcomando utilizado para ordenar los resultados suministradoscomm, el orden de los resultados devueltos porcommpuede ser muy diferente:Lexográfico : el uso del
-ninterruptor con clasificación dará como resultado que se ordenen los "enteros positivos" en una serie de números crecientes. El " error " se puede suprimir utilizandocommel interruptor `s--nocheck-orderOrden de bytes : NO hay uso de
-n switchconsort.LC_COLLATEdetermina el orden que incluso puede variar según lalocaleconfiguración del host en el que se ejecuta el comando. Esta es la entrada que secommespera por defecto.LC_COLLATEPuede encontrar un poco más sobre esto: Referencia1 y Referencia2¿Es el error un problema? Eso depende de lo que intentes lograr. Como verá en los ejemplos a continuación,
commdevuelve los mismos resultados después de comparar los archivos con o sinsortel-ninterruptor`s, aunque su orden variará de la manera anterior dependiendo de si-n switchse usa con elsortcomando. Yo prefiero los resultados ordenados "lexográficos", números que aumentan en una serie.Sin embargo, si no desea los resultados en orden " lexográfico ", NO use el
-ninterruptor al ordenar los datos suministradoscommpara la comparación.PRUEBAS:
Compararemos los resultados del
commcomando con y sin el-ninterruptor. He aumentado la complejidad de mi conjunto de datos de prueba de muestras por solicitud de Kusalananda:Datos de prueba :
file1.txt :
file2.txt :
intersección :
Lista solo los números comunes a AMBOS archivos
Sin
-ninterruptor:Resultados : correcto, pero devuelto en un orden no ordenado
Con
-ninterruptor:Resultados : Correcto, pero devuelto en un orden ordenado LEXOGRÁFICO . La operación se completó correctamente y devolvió los mismos resultados que si se usara
commsin el-ninterruptor, pero en una lista ordenada.Diferencia :
Lista solo números únicos para cada archivo:
Sin
-ninterruptor:Resultados : Correcto: estos números son exclusivos de cada archivo respectivo.
Con
-ninterruptor:Resultados : Correctos, los mismos resultados que
commsin el-nmodificador, pero devuelve el error sobre el orden de los enteros positivos que no se ordenan en los propios archivos.SOLUCIÓN para RESULTADOS LEXOGRÁFICOS:
Use
commel--nocheck-orderinterruptor `s para suprimir el mensaje de error. Como sabemos que los números no están ordenados en cada archivo pero los resultados devueltoscomm -nson correctos, el error puede ignorarse de forma segura al suprimirlo:intersección :
Diferencia :
CONCLUSIÓN:
El error "el archivo no está en orden de clasificación " cuando se devuelve la clasificación de enteros positivos alimentados
commno significa que los resultados devueltos con el-ninterruptor concommestén incorrectos. De hecho, el usocomm -ndevuelve un orden correcto en un orden ordenado.Gracias a @dhag, @kusalananda @ChrisDown por plantear los problemas que requerían una mayor expansión. Siempre feliz de que mi trabajo sea revisado: la única forma en que podemos mejorar es si nuestros pares nos presionan y desafían constantemente.
fuente