天天看點

比較兩個txt檔案内容的差異,分别在windows與linux環境下

困擾了幾天的問題,如果把一個圖像的像素值(如果是彩色圖則是RGB三個值,灰階圖則為一個值,一般都是三通道)存儲在一個txt檔案裡,進行處理後,再把輸出的圖像資料也存在txt檔案裡,那如何知道兩個檔案内容的差異來比較資料的變化?

找到的方法如下:

一、如果是在windows操作環境下:

1、使用DOS比較工具

DOS下提供了FC指令,可以用于比較兩個TXT檔案的差異。将兩個檔案放入到同一個檔案夾下

點選開始-》運作-》輸入cmd,進入DOS下,進入指定目錄,輸入FC a.txt b.txt進行比較,下面會顯示出之間的差異

2、使用Beyond Compare 3進行比較

使用beyond compare 3可以很友善的對比出兩個檔案夾或者檔案的不同之處。并把相差的每一個位元組用顔色加以表示,檢視友善。beyond compare 3并且支援多種規則對比

Beyond Compare是一款檔案及檔案夾(目錄)的對比工具。不僅可以快速比較出兩個目錄的不同,還可以比較每個檔案的内容,而且可以任意顯示比較結果。程式内建了檔案浏覽器,友善您對檔案、檔案夾、壓縮包、FTP網站之間的差異比對以及資料同步。使用它可以管理源代碼,保持檔案夾的同步,比較程式輸出,及驗證CD光牒的複制。它還支援腳本、插件,尤其對中文支援很好。

網上下一個就好

比較的時候選中需要比較的兩個檔案

紅色部分就顯示的是兩個檔案之間的差異,此軟體非常實用,直覺的顯示了兩者之間的差異。還可以實時調整,合并相關内容。在此隻簡單的介紹,抛磚引玉。

二、如果是在linux環境下,我本人是在ubuntu 14.04 環境下

1、使用  diff  指令

具體用法可在終端輸入: $man diff    進行檢視

簡介:

1)、比較兩檔案的差異

$diff in_rgb.txt   out_rgb.txt

2)、比較兩個檔案的差異,隻列出有無差異,并不顯示詳細資訊

$diff -q in_rgb.txt   out_rgb.txt        //若是沒有差異則什麼也不會顯示

3)、比較兩個檔案,将兩個檔案的全部内容分别顯示在左右兩側

$diff -y in_rgb.txt      out_rgb.txt  

4)、比較兩個檔案,僅在左側顯示相同内容,在兩側顯示不同内容

$diff -y --left-column in_rgb.txt    out_rgb.txt

5)、比較兩個檔案,隻将不同的行顯示在左右兩側

$diff -y --suppress-common-line  in_rgb.txt      out_rgb.txt

6)、顯兩檔案不同處,同時顯示相異處前後内容

$diff -c   in_rgb.txt     out_rgb.txt

7)、比較a.txt與b.txt兩個檔案,顯示相異處前後各兩行的内容,并标出這兩個檔案的不同處

$diff -c -2 in_rgb.txt    out_rgb.txt

8)、比較a.txt與b.txt兩個檔案,顯示相異處前後部分的内容,并将結果以合并的方式列出

$diff -u in_rgb.txt     out_rgb.txt

9)、比較a.txt與b.txt兩個檔案的不同,并顯示相異處前後各行的内容,并将結果以合并的方式列出

$diff -U 2 in_rgb.txt      out_rgb.txt

10)、比較dir1與dir2兩個目錄中檔案的異同

$diff dir1 dir2

11)、忽略内容中大小寫的差異

$diff -is dir1 dir2

12)、比較dir1與dir2目錄中的檔案時,若檔案中包含有question字元串,則忽略不比較此行

$diff -I question -s dir1 dir2

13)、比較dir1與dir2目錄中的檔案,并以并列方式顯示檔案的相異之處

$diff -y --suppress-common-lines dir1 dir2

14)、比較dirA與dirB兩個目錄下檔案的異同,比較時連同子目錄下的檔案一并比較

$diff -r dirA dirB

15)、比較dirA與dirB兩個目錄下檔案的異同,比較時忽略名稱為file1的檔案

$diff -x file1 dirA dirB

16)、比較a.txt與b.txt兩個檔案的異同,但比較時不比較空格數目的不同

$diff -b a.txt b.txt

17)、比較a.txt與b.txt兩個檔案的異同,比較時忽略空行

$diff -B a.txt b.txt

18)、比較二進制檔案

$diff -a a.txt b.txt

19)、a.c與b.c是C語言的程式代碼檔案,比較兩者異同,不一樣的地方,列出差異所在函數

$diff -p a.c b.c

20)、比較兩個檔案并忽略空白字元和空白行,且當檔案相同時僅顯示左側檔案内容

$diff -bBy  --left-column   file1  file2

更多的用法可自行檢視文檔

2、還看到有一種利用shell腳本的

第一種:如果想對兩個有序的檔案進行比較,可以使用comm指令。

文法:comm [- 123 ] file1 file2

說明:該指令是對兩個已經排好序的檔案進行比較。其中file1和file2是已排序的檔案。

comm讀取這兩個檔案,然後生成三列輸出:僅在file1中出現的行;僅在file2中出現的行;

在兩個檔案中都存在的行。如果檔案名用“- ”,則表示從标準輸入讀取。

選項1、2或3抑制相應的列顯示。例如

comm - 12就隻顯示在兩個檔案中都存在的行;

comm - 23隻顯示在第一個檔案中出現而未在第二個檔案中出現的行;

comm - 123則什麼也不顯示。

有一個問題就是,如果兩個檔案排序不一樣的話,會出問題

第二種:grep指令法

指令如下:grep -vwf file1 file2

統計file1中沒有,file2中有的行

3、如果文本檔案沒有排序,可以使用Diff指令,如上

該指令的功能為逐行比較兩個文本檔案,列出其不同之處。它比comm指令完成更複雜的檢查。

它對給出的檔案進行系統的檢查,并顯示出兩個檔案中所有不同的行,不要求事先對檔案進行排序。

文法:diff [選項] file1 file2

說明:該指令告訴使用者,為了使兩個檔案file1和file2一緻,需要修改它們的哪些行。如果用“- ”表示file1或fiie2,則表示标準輸入。

如果file1或file2是目錄,那麼diff将使用該目錄中的同名檔案進行比較。例如:

diff /usr/xu mine

把目錄/usr/xu 中名為mine的檔案與目前目錄中的mine檔案進行比較。

diff能差別塊和字元裝置檔案以及FIFO(管道檔案),不會把它們與普通檔案進行比較。

如果file1和file2都是目錄,則diff會産生很多資訊。如果一個目錄中隻有一個檔案,則産生一條資訊,

指出該目錄路徑名和其中的檔案名。

diff各選項的含義如下:

- b 忽略行尾的空格,而字元串中的一個或多個空格符都視為相等。如How are you與How are you被視為相同的字元串。

- c 采用上下文輸出格式(提供三行上下文)。

- C n 采用上下文輸出格式(提供n行上下文)。

- e 産生一個合法的ed腳本作為輸出。

- r 當file1和file2是目錄時,遞歸作用到各檔案和目錄上。

4、比較二進制檔案,cmp指令

用途

比較兩個檔案的内容并報告不同的第一個字元。

文法

cmp [ -l | -s ] File1 File2

描述

cmp 指令比較 File1 和 File2 參數指定的檔案,并将結果寫到标準輸出。如果為 File1 或 File2 參數指定 -(減号),

則 cmp 指令讀取該檔案的标準輸入。隻可以從标準輸入讀取一個檔案。在預設條件下,如果檔案相同,

則 cmp 指令不顯示任何内容。如果它們不同,則 cmp 指令顯示發生不同的第一個位元組數和行數。如果指定了 -l 标志,

并且如果一個檔案是另一檔案的初始後繼(即,如果在查找任何差别之前,cmp 指令讀取檔案中的檔案結束符),

則 cmp 指令記下它。通常,使用 cmp 指令比較非文本檔案,使用 diff 指令比較文本檔案。

标志

-l     對于每個不同,(小寫字母 L)顯示十進制的位元組數和八進制的不同位元組。

-s     隻傳回退出值。值 0 訓示相同的檔案;值 1 訓示不同的檔案;值 2 訓示不可通路的檔案或缺少選項。

退出狀态

該指令傳回以下退出值:

0     檔案相同。

1     檔案不同。即使一個檔案是另一個檔案的初始後繼(一個檔案與另一個檔案的第一個部分相同),也給出該值。

>1     發生錯誤。

繼續閱讀