¿Por qué la salida de comm no muestra registros comunes?

¿Por qué la salida de comm no muestra registros comunes?

Tengo una lista de ID (ordenadas) en dos archivos y ejecuté el comando comm para compararlos, pero parece omitir una línea común a ambos archivos. ¿Porqué es eso?

Archivo1:

1
2
3
4
5
6
7
8
9
11
12
13
15
16
17
18
19
20
21
22

Archivo2:

16
18
21
23
705
707
709
711
712
826
827
839
846
847
848
872
873
874
875
891

Salida de comunicación:$> comm file1 file1

1
    16  //exists in both files
    18  //exists in both files
2
    21
    23
3
4
5
6
7
    705
    707
    709
    711
    712
8
    826
    827
    839
    846
    847
    848
    872
    873
    874
    875
    891
9
11
12
13
15
16 //it's here!
17 
18 //...and here!
19
20
21
22

Ambos archivos están ordenados. Sin embargo, supongo que eso commno hace comparación numérica y solo mira las entradas lexicográficamente. Si es así, ¿cuáles son algunas alternativas que puedo probar para esto?

Respuesta1

commdebería indicarle que uno de los archivos no está ordenado:

comm: file 1 is not in sorted order

Espera que los archivos se ordenen utilizando el orden de clasificación de la configuración regional actual (según lo determinado por LC_COLLATE); No aceptará orden numérico.

Para comparar los archivos, puede ordenarlos previamente (lexicográficamente como usted señala):

comm <(sort file1) <(sort file2)

Si desea que el resultado se ordene numéricamente, ordénelo nuevamente:

comm <(sort file1) <(sort file2) | sort -n

Esto produce

1
2
3
4
5
6
7
8
9
11
12
13
15
        16
17
        18
19
20
        21
22
    23
    705
    707
    709
    711
    712
    826
    827
    839
    846
    847
    848
    872
    873
    874
    875
    891

información relacionada