RISPOSTA AGGIORNATA:
PROBLEMA:
L'OP sta ricevendo un errore su "il file non è in ordine " quando si utilizza comm
per confrontare numeri interi positivi nei file, non testo. Quindi abbiamo a che fare con numeri non decimali.
Risposta breve:
A seconda dell'uso -n
dell'interruttore con il sort
comando utilizzato per ordinare i risultati forniti comm
, l'ordine dei risultati restituiti comm
può essere molto diverso:
Lessico : l'uso -n
dell'interruttore con ordinamento comporterà che gli "Integer positivi" vengano ordinati in una serie di numeri crescenti. L '" errore " può essere eliminato usando l comm
' interruttore--nocheck-order
Ordine byte : NON è previsto l' uso di -n switch
con sort
. LC_COLLATE
determina l'ordinamento che può anche variare in base al modo in cui locale
è impostato sull'host in cui viene eseguito il comando. Questo è l'input comm
previsto per impostazione predefinita. Un po 'di più LC_COLLATE
è disponibile qui: Reference1 e Reference2
L'errore è un problema?
Dipende da cosa stai cercando di ottenere. Come vedrai negli esempi seguenti,comm
restituisce gli stessi risultati dopo aver confrontato i file con o senza l' sort
opzione `s-n
, sebbene il loro ordinamento varierà nel modo sopra a seconda che-n switch
sia usato con ilsort
comando. Io stesso, preferisco risultati "lessicali" ordinati - numeri che aumentano in una serie.
Tuttavia, se non si desidera che i risultati siano in ordine " lessicale ", NON utilizzare l' -n
interruttore durante l'ordinamento dei dati forniti comm
per il confronto.
TEST:
Confronteremo i risultati del comm
comando con e senza, l' -n
interruttore. Ho aumentato la complessità del mio set di dati di test dei campioni su richiesta di Kusalananda:
Dati di prova :
file1.txt :
40
110000
2200
6
33000
file2.txt :
2200
40
33000
6
440000
Intersezione :
Elencare solo i numeri comuni a ENTRAMBE i file
Senza -n
interruttore:
comm -12 <(sort file1.txt) <(sort file2.txt)
2200
33000
40
6
Risultati : corretto, ma restituito in un ordine non ordinato
Con -n
interruttore:
comm -12 <(sort -n file1.txt) <(sort -n file2.txt)
6
40
2200
33000
comm: file 1 is not in sorted order
Risultati : corretto, ma restituito in un ordine ordinato LEXOGRAFICO . L'operazione è stata completata correttamente e ha restituito gli stessi risultati dell'utilizzo comm
senza l' -n
opzione, ma in un elenco ordinato.
Differenza :
Elenca solo numeri univoci per ciascun file:
Senza -n
interruttore:
comm -3 <(sort file1.txt) <(sort file2.txt)
110000
440000
Risultati : corretti: questi numeri sono in effetti esclusivi per ogni rispettivo file.
Con -n
interruttore:
comm -3 <(sort -n file1.txt) <(sort -n file2.txt)
110000
comm: file 1 is not in sorted order
440000
Risultati : corretti, stessi risultati comm
senza lo -n
switch, ma restituisce l'errore sull'ordine degli interi positivi che non sono stati ordinati nei file stessi.
SOLUZIONE per RISULTATI LEXOGRAFICI:
Usa l' interruttore comm
`s --nocheck-order
per sopprimere il messaggio di errore. Poiché sappiamo che i numeri non sono ordinati in ciascun file ma i risultati restituiti comm -n
sono corretti, l'errore può essere tranquillamente ignorato sopprimendolo:
Intersezione :
comm -12 --nocheck-order <(sort -n file1.txt) <(sort -n file2.txt)
6
40
2200
33000
Differenza :
comm -3 --nocheck-order <(sort -n file1.txt) <(sort -n file2.txt)
110000
440000
CONCLUSIONE:
L'errore "il file non è in ordine " quando viene restituito l'ordinamento di numeri interi positivi alimentati comm
non significa che i risultati restituiti utilizzando l' -n
opzione con comm
siano errati. In effetti, l'utilizzo comm -n
restituisce un ordine corretto in un ordine ordinato!
Grazie a @dhag, @kusalananda @ChrisDown per aver sollevato i problemi che hanno richiesto un'ulteriore espansione. Sono sempre felice di rivedere il mio lavoro: l'unico modo per migliorare è se siamo costantemente spinti e sfidati dai nostri colleghi.