Bash

比較兩個文件時輸出不同的行

  • April 7, 2015

我有兩個具有相同數量的換行符終止字元串的文本文件。兩個文件中的行相互對應。每個文件中的行可能會單獨重複。

我想快速確定哪兩行不同,並從第一個文件或第二個文件輸出。

檔案一:

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

引用自:https://unix.stackexchange.com/questions/194686