Spesso è utile confrontare le versioni dei file di testo. Per gli amministratori di sistema e gli sviluppatori di software, questo è particolarmente importante. Un amministratore di sistema potrebbe, ad esempio, dover confrontare un file di configurazione esistente con una versione precedente per diagnosticare un problema di sistema. Allo stesso modo, un programmatore ha spesso bisogno di vedere quali modifiche sono state apportate ai programmi nel tempo.
La comunicazione l'utilità visualizza un confronto riga per riga di due file ordinati. La prima delle tre colonne visualizzate elenca le righe trovate solo in file1, la seconda colonna elenca le righe trovate solo in file2 e la terza elenca le righe comuni a entrambi i file. La sintassi di base per il comando “comm” è:
# comm [options] file1 file2
Argomenti
Gli argomenti file1 e file2 sono i percorsi dei file confrontati da comm. L'uso di un trattino (–) al posto di file1 o file2 fa sì che comm legga lo standard input invece di quel file.
Opzioni
Puoi combinare le opzioni. Senza opzioni, comm produce un output a tre colonne.
Opzioni | Funzione |
---|---|
-1 | Non visualizza la colonna 1 (non visualizza le righe trovate solo in file1). |
-2 | Non visualizza la colonna 2 (non visualizza le righe trovate solo in file2). |
-3 | Non visualizza la colonna 3 (non visualizza le righe trovate in entrambi i file). |
-i | Confronto delle righe senza distinzione tra maiuscole e minuscole. |
– -controlla-ordine | Controlla l'ordine degli input, anche se tutte le linee di input sono abbinabili |
– -nocheck-order | Ignora l'ordine degli input |
– -output-delimiter=STR | Delimita le colonne con il delimitatore “STR” |
– -help | Visualizza un menu di aiuto |
– -versione | Visualizza le informazioni sulla versione del comando |
Esempi di utilizzo del comando "comm" in Linux
Esempio 1:utilizzo di base
Vediamo un esempio di base del comando "comm" per confrontare 2 file ordinati. I file sono come mostrato di seguito:
# cat file1 aa bb cc dd
# cat file2 cc xx yy zz
Il comando comm confronta i file riga per riga e restituisce tutte le righe identiche. Ad esempio:
# comm file1 file2 aa bb cc dd xx yy zz
L'output di questo comando viene visualizzato in tre colonne:la colonna 1 mostra le righe solo in file1 (aa, bb, dd), la colonna2 mostra tutte le righe solo in file2 (xx, yy, zz) e la colonna 3 mostra tutte le righe uguali tra due file (cc). Questo è un confronto molto più dettagliato rispetto a diff e l'output può essere schiacciante quando tutto ciò che vuoi è trovare o controllare una o due semplici modifiche. Tuttavia, può essere incredibilmente utile quando non hai molta familiarità con nessuno dei due file e vuoi vedere come si confrontano.
Esempio 2:Sopprimere le conte
comm supporta le opzioni nella forma -n dove n è 1, 2 o 3. Se utilizzate, queste opzioni specificano quali colonne sopprimere. Ad esempio, se volessimo emettere solo le righe condivise da entrambi i file, sopprimeremmo l'output delle colonne 1 e 2:
# comm -12 file1 file2 cc
Allo stesso modo, puoi visualizzare solo le righe che sono presenti solo in file1 e file2 rispettivamente usando i comandi seguenti.
# comm -23 file1 file2 aa bb dd
# comm -13 file1 file2 xx yy zz
Esempio 3:controllo dell'ordinamento in ingresso
Il comando comm fornisce 2 opzioni per controllare gli input ordinati:
1. –controlla l'ordine
2. –nocheck-order
Il –ordine di controllo l'opzione controlla che l'input sia ordinato correttamente prima del confronto. Se l'input non è ordinato, riceverai un errore come mostrato di seguito:
# comm --check-order file1 file2 aa bb cc dd xx comm: file 2 is not in sorted order
Mentre il –nocheck-order l'opzione consente il confronto dei file anche se l'input non è nel formato ordinato. Ad esempio:
# cat file1 aa bb cc dd
# cat file2 xx cc yy zz
# comm --nocheck-order file1 file2 aa bb cc dd xx yy zz
Esempio 4:output delimitato
comm fornisce anche un'opzione per eliminare l'output utilizzando il delimitatore fornito dall'utente. Ad esempio, invece dell'output predefinito delimitato da "tab", possiamo utilizzare un delimitatore come "|" (tubo) come mostrato nell'esempio seguente:
# comm --output-delimiter="|" file1 file2 aa bb ||cc dd |xx |yy |zz
Diff V/s di comunicazione
comunicazione è simile a differenza in quanto entrambi i comandi confrontano due file. Ma comm può anche essere usato come uniq; comm seleziona le righe duplicate o univoche tra due file ordinati, mentre uniq seleziona le righe duplicate o univoche all'interno dello stesso file ordinato.