In this post I'm going to show how to use the cmp Unix utility, an utility to compare files.

In questo post vi mostrerò come usare il programma Unix cmp, un programma per comparare file.

Basic tutorial on the cmp command

Hello world!
After the split utility, it's time to know another Unix utility: cmp.
This utility is used to compare two files and check if they have equal content (the check if performed byte per byte).

Its general sintax is:

cmp [options] file1 file2

Let's see some of the available options:

  • -l or --verbose
    Show ALL the bytes that differ.
  • -i N or --ignore-initial=N
    Skip N bytes in both files before starting compare.
  • -i N1:N2 or --ignore-initial=N1:N2
    Skip N1 bytes in file1 and N2 bytes in file2 before starting the comparison.
  • -n M or --bytes=M
    Compare only M bytes.

Please notice that the -i and -n options can use the same multipliers as the --bytes option in the split utility.

Let's see some examples in order to undestand how it works.
The following files are going to be the input files to the program:

File "test1"

TestFile, ok?

File "test2"

Second testfile, are you happy?

Standard comparison (just outputs the first difference)

  • Input:
    cmp test1 test2
  • Output:
    test1 test2 differ: char 1, line 1

Verbose comparison (outputs ALL the bytes that are different)

  • Input:
    cmp -l test1 test2
  • Output:
    1 124 123
    3 163 143
    4 164 157
    5 106 156
    6 151 144
    7 154  40
    8 145 164
    9  54 145
    10  40 163
    11 157 164
    12 153 146
    13  77 151
    cmp: EOF on test1

Skip the first 5 bytes in both files and make a verbose comparison

  • Input:
    cmp -l --ignore-initial=5 test1 test2
  • Output:
    1 151 144
    2 154  40
    3 145 164
    4  54 145
    5  40 163
    6 157 164
    7 153 146
    8  77 151
    cmp: EOF on test1

Perform a verbose comparison only on the first 5 bytes of both files

  • Input:
    cmp -l --bytes=5 test1 test2
  • Output:
    1 124 123
    3 163 143
    4 164 157
    5 106 156

The structure of the verbose output is:

OFS BT1 BT2

where:

  • OFS is the offset of the different byte (that is, the location of the byte, INSIDE the files).
  • BT1 is the value that was found at the offset OFS in the first file.
  • BT2 is the value that was found at the offset OFS in the second file.

I know these are not all the possible options for this command, but I hope this post will still be a good reference for this utility.
See you another time, in another post!

Go back to the top, Share, Look at the comments or Comment yourself!

Tutorial di base sul comando cmp

Salve mondo!
Dopo il programma split, è il momento di conoscere un altro programma Unix: cmp.
Questo programma viene usato per confrontare due file e verificare che abbiano uguale contenuto (il controllo viene fatto a livello di byte).

La sintassi generale è:

cmp [opzioni] file1 file2

Vediamo alcune delle opzioni disponibili:

  • -l o --verbose
    Mostra TUTTI i byte che differiscono.
  • -i N o --ignore-initial=N
    Salta N byte in ambedue i file prima di iniziare a confrontare.
  • -i N1:N2 o --ignore-initial=N1:N2
    Salta N1 byte in file1 e N2 byte in file2 prima di iniziare il confronto.
  • -n M o --bytes=M
    Confronta solo M byte.

Vi faccio notare che le opzioni -i e -n possono usare gli stessi moltiplicatori dell'opzione --bytes nel programma split.

Vediamo alcuni esempi per capire come funziona.
I file seguenti saranno i file in ingresso al programma:

File "test1"

TestFile, ok?

File "test2"

Second testfile, are you happy?

Confronto normale (mostra solo la prima differenza)

  • Input:
    cmp test1 test2
  • Output:
    test1 test2 differ: char 1, line 1

Confronto prolisso (mostra TUTTI i byte che differiscono)

  • Input:
    cmp -l test1 test2
  • Output:
    1 124 123
    3 163 143
    4 164 157
    5 106 156
    6 151 144
    7 154  40
    8 145 164
    9  54 145
    10  40 163
    11 157 164
    12 153 146
    13  77 151
    cmp: EOF on test1

Salta i primi 5 byte in ambedue i file ed effettua un confronto prolisso

  • Input:
    cmp -l --ignore-initial=5 test1 test2
  • Output:
    1 151 144
    2 154  40
    3 145 164
    4  54 145
    5  40 163
    6 157 164
    7 153 146
    8  77 151
    cmp: EOF on test1

Effettua un confronto prolisso solo sui primi 5 byte di ambedue i file

  • Input:
    cmp -l --bytes=5 test1 test2
  • Output:
    1 124 123
    3 163 143
    4 164 157
    5 106 156

La struttura dell'output prolisso è:

OFS BT1 BT2

dove:

  • OFS è la posizione del byte differente (cioè, la locazione del byte, ALL'INTERNO dei file).
  • BT1 è il valore trovato alla posizione OFS nel primo file.
  • BT2 è il valore trovato alla posizione OFS nel secondo file.

So che queste non sono tutte le opzioni del comando, ma spero che questo post sia comunque un buon riferimento.
Ci si vede un'altra volta, in un altro post!

Torna in cima, Condividi, Guarda i commenti o Commenta tu stesso!