Introduzione
Il comm
command è una semplice utility Linux per confrontare i file concentrandosi sul contenuto comune. Il comando confronta due file ordinati riga per riga e visualizza i risultati in tre colonne.
La seguente guida spiegherà come utilizzare Linux comm
comando con esempi.

Prerequisiti
- Un sistema che esegue Linux.
- Accesso al terminale.
Sintassi del comando di comunicazione
Il comm
comando viene eseguito con almeno due argomenti che indicano i nomi dei file da confrontare. L'aggiunta di opzioni prima dei nomi dei file personalizza l'output.
Il comm
di base la sintassi è:
comm [file_name_1] [file_name_2]
comm [options] [file_name_1] [file_name_2]
Tuttavia, eseguendo comm
senza alcuna opzione non fornisce risultati e stampa il seguente output:

Opzioni comando di comunicazione
Utilizzando comm
è semplice, ma l'aggiunta di opzioni fornisce ulteriore personalizzazione.
La tabella seguente include tutti i comm
opzioni:
Comando | Descrizione |
---|---|
-1 | Stampa l'output senza la prima colonna, nascondendo le righe univoche del primo file. |
-2 | Nasconde la seconda colonna nell'output (righe univoche del secondo file). |
-3 | Non stampa la colonna contenente le righe comuni. |
--check-order | Verifica se i file sono ordinati. |
--nocheck-order | Stampa il risultato senza controllare se i file sono ordinati. |
--output-delimiter=[any character] | Sostituisce gli spazi predefiniti nell'output con un altro carattere. |
--total | Mostra il numero totale di righe in ogni colonna. |
-z | Visualizza le righe di output come NULL-terminated invece dell'output predefinito con newline-terminated. |
--help | Mostra le informazioni della guida. |
--version | Visualizza le informazioni sulla versione. |
Esempi di comunicazione Linux
Il comm
comando funziona con due file ordinati. Per capire come comm
funziona, imposta un ambiente di test:
- Crea due file di prova.
- Assegna un nome ai file (ad esempio, File_1 e File_2).
- Aggiungi parole o numeri diversi a ciascun file.
- Assicurati che alcuni contenuti si sovrappongano.
Nota: Linux offre numerosi modi per creare file dal terminale. Il modo più semplice è utilizzare il comando touch.
Utilizza il comando cat per visualizzare il File_1 e File_2 contenuto. L'output mostra che i file si sovrappongono in tre parole (art , cane e modo ):

Le seguenti sezioni utilizzano File_1 e File_2 per spiegare come comm
funziona.
Confronta due file
Confronta due file ordinati riga per riga con:
comm File_1 File_2

Il comando stampa i risultati in tre colonne:
- Colonna 1 mostra solo i valori univoci del primo file.

- Colonna 2 stampa gli elementi presenti solo nel secondo file.

- Colonna 3 mostra il contenuto comune per entrambi i file:art , cane e modo .

Nascondi colonne
Usa argomenti -1
, -2
e -3
e le combinazioni per visualizzare solo colonne particolari. Ad esempio, stampa solo righe comuni per entrambi i file con:
comm -12 File_1 File_2

Utilizzando -12
con comm
nasconde la prima e la seconda colonna, lasciando solo quella contenente le righe condivise da entrambi i file.
D'altra parte, -3
nasconde la colonna tre e mostra le righe univoche per ogni file:
comm -3 File_1 File_2

Ignora caso
Confronto con comm
fa distinzione tra maiuscole e minuscole. Tutte le parole in File_1 e File_2 sono minuscole, quindi comm
riconosce l'arte , cane e modo come comune per entrambi i file.
Tuttavia, se, ad esempio, la parola arte è maiuscolo in File_1 ma minuscolo in File_2, l'output è:

Differenze tra maiuscole e minuscole con la parola arte /Arte tra due file richiede comm
per registrare la parola come univoca per ogni file. Mentre comm
non accetta -i
come opzione per ignorare maiuscole e minuscole, l'opzione tr fornisce una soluzione alternativa.
Usa Tr
sui due file per convertire le maiuscole e minuscole e quindi reindirizzare l'output ai file temporanei (Temp_1 , Temp_2 ):
tr A-Z a-z <File_1 > Temp_1
tr A-Z a-z <File_2 > Temp_2

Tr
converte il contenuto di entrambi i file in minuscolo e crea nuovi file per salvare l'output (Temp_1 , Temp_2 ). I file originali rimangono invariati.
Esegui comm
su Temp_1 e Temp_2 per confrontare i file "ignorando" maiuscole e minuscole:
comm Temp_1 Temp_2

Il comando restituisce art minuscolo come parola comune per entrambi i file.
Confronta file non ordinati
Il comm
comando produce un output prezioso solo quando i file ordinati vengono utilizzati come argomenti. Quando comm
funziona con file non ordinati, l'output non è utilizzabile e stampa sempre un messaggio di errore.
Ad esempio, i due file seguenti non vengono ordinati, come mostrato con cat
:

Quando utilizzi comm
sui file non ordinati, l'output stampa:

Mentre comm
accoppia determinate righe e produce un output, l'output è incompleto e inutilizzabile. Il messaggio di errore specifica che nessuno dei due file è in ordine.
Per verificare che i file non siano ordinati, utilizza comm --check-order
:
comm --check-order Not_Sorted_File_1 Not_Sorted_File_2

Il --check-order
l'opzione stampa il messaggio di errore e interrompe comm
dal confronto dei file al primo elemento non ordinato.
Per forzare comm
per stampare un output e nascondere il messaggio di errore, utilizzare --nocheck-order
:
comm --nocheck-order Not_Sorted_File_1 Not_Sorted_File_2

L'output non è affidabile. Ad esempio, la parola arte è presente nelle colonne uno e due, anche se è comune a entrambi i file.
Il modo infallibile per utilizzare comm
con file non ordinati è applicare l'ordinamento. Eseguire quanto segue:
comm <(sort Not_Sorted_File_1 ) <(sort Not_Sorted_File_2)

L'output mostra che le parole art , cane e modo sono comuni per entrambi i file.
Tieni presente che sort
senza argomenti influisce solo sull'output standard e non modifica i file di origine. Comunque, sort
può essere utilizzato con altri comm
opzioni.
Ad esempio, per stampare solo parole comuni per entrambi i file non ordinati, utilizzare:
comm -12 <(sort Not_Sorted_File_1 ) <(sort Not_Sorted_File_2)

Per ordinare i file di origine e quindi eseguire comm
, usa sort -o
. Il -o
argomento salva l'output ordinato in un file specifico.
Ad esempio, ordina File_non_ordinato_1 e salva l'output nello stesso file con:
sort -o Not_Sorted_File_1 Not_Sorted_File_1

Esecuzione di cat
dopo aver ordinato il file mostra che il file è ora ordinato. Ripeti la stessa procedura per il secondo file:
sort -o Not_Sorted_File_2 Not_Sorted_File_2

Esegui comm
per confrontare i file:
comm Not_Sorted_File_1 Not_Sorted_File_2

Confronta directory
Usa comm
con ls per confrontare i nomi dei file in due directory. Ad esempio, confronta Directory1 e Directory2 :
comm <(ls Directory1) <(ls Directory2)

La prima colonna rappresenta i nomi di file univoci per Directory1 , il secondo quelli esclusivi di Director y2 e il terzo rappresenta i nomi di file comuni per entrambe le cartelle.
Durante l'esecuzione di comm
con ls
, il comando esamina solo i nomi dei file, non il contenuto. I file elencati come comuni per entrambe le cartelle potrebbero comunque differire anche se hanno lo stesso nome.

Usa comunicazione con STDIN
Per confrontare un file con l'input standard del terminale, usa un trattino come uno degli argomenti con comm
.
Ad esempio, confronta File_1 con lo standard input usando:
comm File_1 -

Scrivi il testo per confrontare File_1 direttamente al terminale o utilizzare un editor di testo.

Dopo aver premuto Invio , il comando stampa l'output in tre colonne, utilizzando STDIN invece di File_2.

La prima colonna rappresenta i contenuti esclusivi di File_1 , la seconda mostra le parole che si trovano solo nello standard input e la terza le parole comuni per entrambi.
Cambia il separatore predefinito
Il comm
l'output separa le colonne con spazi per impostazione predefinita. Per modificare il separatore, utilizza il --output-delimiter
opzione.
Ad esempio, per utilizzare *
invece di spazi, esegui:
comm --output-delimiter=* File_1 File_2

L'output mostra le parole in File_1 non hanno asterisco, quelli in File_2 hanno un asterisco e gli elementi comuni per entrambi i file hanno due asterischi.
Mostra conteggi riga
Mostra il numero totale di righe in ogni colonna con il --total
opzione:
comm --total File_1 File_2

L'output stampa il numero di righe in fondo a ciascuna colonna.
Conclusione
Dopo aver seguito i passaggi di questo tutorial, sai come confrontare i file riga per riga con il comm
comando.
Quindi, impara un modo diverso per confrontare i file con il comando diff.