水平和垂直比較兩個文件內容

水平和垂直比較兩個文件內容

我有兩個文件:

File1 的內容如下:

1 2 3 4 5 6 7 8 10

File2 的內容如下:

1
2
3
4
5
6
7
8
9
10

我怎麼能找到兩個文件之間的差異並打印出奇數,並說出它來自哪個文件。

例如,在這種情況下9僅出現在 File2 中,那麼我如何執行命令並取得以下行的輸出

9 is only in File2

答案1

如果您有乾淨的格式(空格 x 換行符),最簡單的方法是將行轉換為行,然後將它們進行比較,如下所示:

diff <( sed -e "s/ /\n/g" h.txt ) v.txt

哪裡h.txt是橫檔,哪裡v.txt是豎檔

答案2

您可能會想使用 (G)AWK:

若要尋找差異,請先使用 AWK 將 file1.txt 轉換為逐行表示形式,然後將結果透過管道傳送至 diff:

gawk 'BEGIN {FS = " "} ; {for(i=1; i<=NF; i++) print $i}' file1.txt | diff file2.txt - 

答案3

有不只一種方法可以做到這一點;這裡是comm.

首先是printf一個頭來解釋comm的輸出 - 給出請求的檔案名稱 - 然後comm在排序後的輸入上運行,抑制兩個檔案中都存在的行 ( -3)。兩個輸入comm是過程替換,我使用 don_crissti 的tr建議將空格轉換File1為換行符;然後將兩個文件傳遞給sort,這comm需要。

printf "File1\tFile2\n"; comm -3  <(tr ' ' '\n' < File1 | sort)  <(sort File2)

樣品運行

輸入檔1:

1 2 3 4 5 6 7 8 10 11

輸入檔2:

1
2
3
4
5
6
7
8
9
10

輸出:

$ printf "File1\tFile2\n"; comm -3 <(sed 's/ /\n/g' File1 |sort ) <(sort File2)
File1   File2
11
        9

相關內容