Linux,cmpで2つのファイルを1バイトずつ比較する

スポンサーリンク

鍛錬 788

Linux,cmpで2つのファイルを1バイトずつ比較する

2つのファイルを1バイトずつ比較する方法の一つとして、cmp を使用する方法があります。
 
使用方法は、以下に示す通りです。

最初に差異が生じた箇所の、行番号と位置(バイト数)を表示します。

cmp ファイル名1 ファイル名2

 
以下は、主なオプションを用いた使用方法です。

異なる全ての箇所について、「位置(バイト数)」(10進数)と「値」(8進数)を表示する

cmp -l ファイル名1 ファイル名2

 
ファイルの先頭から指定したバイト数を無視する

cmp -i バイト数 ファイル名1 ファイル名2

 
比較するバイト数を指定する

cmp -n バイト数 ファイル名1 ファイル名2

オプション

以下は、上記のオプションについてです。

オプション 機能
-l 異なる全ての箇所について、
「位置(バイト数)」(10進数)と「値」(8進数)を表示する
-i ファイルの先頭から指定したバイト数を無視する
-n 比較するバイト数を指定する
スポンサーリンク

実行結果

以下は、今回比較する2つのファイル、A.txt と B.txt です。

A.txt B.txt
AAABBBCCC AAAYYYCCC

オプションを付加せずにファイルを比較

以下は、オプションを付加せずにファイルを比較しています。

***@ubuntu:/var/tmp/test$ 
***@ubuntu:/var/tmp/test$ cat A.txt
AAABBBCCC

***@ubuntu:/var/tmp/test$ cat B.txt
AAAYYYCCC

***@ubuntu:/var/tmp/test$ 
***@ubuntu:/var/tmp/test$ 
***@ubuntu:/var/tmp/test$ cmp A.txt B.txt
A.txt B.txt 異なります: バイト 4、行 1

 
上記に示した通り、1行目の4バイト目から差異が生じていることが分かりました。

異なる全ての箇所について表示

以下は、異なる全ての箇所について「位置(バイト数)」(10進数)と「値」(8進数)を表示しています。

***@ubuntu:/var/tmp/test$ 
***@ubuntu:/var/tmp/test$ cat A.txt
AAABBBCCC

***@ubuntu:/var/tmp/test$ cat B.txt
AAAYYYCCC

***@ubuntu:/var/tmp/test$ 
***@ubuntu:/var/tmp/test$ 
***@ubuntu:/var/tmp/test$ cmp -l A.txt B.txt
 4 102 131
 5 102 131
 6 102 131

 
上記に示した通り、異なる全ての箇所は以下の通りであることが分かりました。

異なる位置(バイト数)(10進数) A.txt の値(8進数) B.txt の値(8進数)
4 102 131
5 102 131
6 102 131

ファイルの先頭から指定したバイト数を無視

以下は、ファイルの先頭から指定したバイト数を無視して、2つのファイルを比較しています。

今回は先頭から4バイトを無視しています。

***@ubuntu:/var/tmp/test$ 
***@ubuntu:/var/tmp/test$ cat A.txt
AAABBBCCC

***@ubuntu:/var/tmp/test$ cat B.txt
AAAYYYCCC

***@ubuntu:/var/tmp/test$ 
***@ubuntu:/var/tmp/test$ 
***@ubuntu:/var/tmp/test$ cmp -l -i 4 A.txt B.txt
1 102 131
2 102 131

 
上記に示した通り、ファイルの先頭から4バイト無視した場合、2箇所の値が異なることが分かりました。

A.txt B.txt
AAAB BBCCC AAAY YYCCC

比較するバイト数を指定

以下は、2つのファイルを比較する際に、比較するバイト数を指定しています。

今回はファイルの先頭から2バイトを無視し、3バイトを比較しています。
(3バイト目から5バイト目までの範囲で比較しています)

***@ubuntu:/var/tmp/test$ 
***@ubuntu:/var/tmp/test$ cat A.txt
AAABBBCCC

***@ubuntu:/var/tmp/test$ cat B.txt
AAAYYYCCC

***@ubuntu:/var/tmp/test$ 
***@ubuntu:/var/tmp/test$ 
***@ubuntu:/var/tmp/test$ cmp -l -i 2 -n 3 A.txt B.txt
2 102 131
3 102 131

 
上記に示した通り、比較するバイト数を指定することができました。

A.txt B.txt
AA ABB BCCC AA AYY YCCC
タイトルとURLをコピーしました