Bash
比較兩個文件時輸出不同的行
我有兩個具有相同數量的換行符終止字元串的文本文件。兩個文件中的行相互對應。每個文件中的行可能會單獨重複。
我想快速確定哪兩行不同,並從第一個文件或第二個文件輸出。
檔案一:
this is a string this is another string empty string
文件 B:
this is A string this is another string Empty string
從文件 A 的角度來看,我想輸出第一行和第三行,因為它們與文件 B 中的不同。同樣,對於文件 B,我將輸出該文件的第一行和第三行。
我比較文件的標準方法是對兩個文件進行排序,然後使用
comm
二進製文件,但排序會破壞兩個文件之間的對應關係。我也嘗試過完成這項工作,diff
但它看起來是為不同的任務而設計的。也可以使用製表符分隔從兩個文件中輸出兩條不同的行。
這是從以下角度進行比較
fileA
:$ awk 'FNR==NR{a[NR]=$0;next;} $0!=a[FNR]' fileB fileA this is a string empty string
這種方法將整個讀
fileB
入記憶體。因此,如果您的文件很大(記憶體太大),您應該選擇另一種方法。同樣,要從 的角度獲得輸出
fileB
:$ awk 'FNR==NR{a[NR]=$0;next;} $0!=a[FNR]' fileA fileB this is A string Empty string
記憶體效率更高的方法
這種方法一次只讀取兩行,因此記憶體效率更高。從
FileA
:$ awk '{a=$0;getline <"fileA";} $0!=a' fileB this is a string empty string
從
fileB
:$ awk '{a=$0;getline <"fileB";} $0!=a' fileA this is A string Empty string