Linux命令比較文件內容

  • 2019 年 11 月 2 日
  • 筆記

文件準備

創建兩個文件,分別為a.txt和b.txt,它們所含內容分別為:

a.txt b.txt
1-wfhune
2-chdamnsbchj
3-uyr92fiubkqw
5-cgvdnsb
2-djyv
4-dvcahsgdb
5-wvchdfyt

普通用法,整行對比

命令 diff a.txt b.txt grep -f a.txt b.txt grep -vf a.txt b.txt
解釋 比較兩個文件 取兩個文件中都有的行 取b文件中有,但a文件中沒有的行
結果 1,4c1,3
< 1-wfhune
< 2-chdamnsbchj
< 3-uyr92fiubkqw
< 5-cgvdnsb

> 2-djyv
> 4-dvcahsgdb
2-djyv
4-dvcahsgdb
5-wvchdfyt

高級用法,每行關鍵部分對比

回顧一下兩個文件中的內容,格式都是 x-yyyy這種格式,我們認為x為鍵,yyyy為值。現在我們只想比較x,而不關心yyyy。

該怎麼辦呢?

命令 grep -vf <(cut -d – -f 1 a.txt) <(cat b.txt) grep -vf <(awk -F”-” ‘{print $1}’ a.txt) <(cat b.txt)
解釋

<() 用於命令嵌套。
cut -d – -f 1 a.txt,其中參數-d 用於定義分隔符,參數-f 用於定義分割後要提取第幾段文本。比如這裡定義分隔符為”-“,並提取分割後的第一段文本。

這裡只是用awk命令替換了cut命令,作用相同。
awk 的 -F參數用於定義分隔符,printf $X 提取分割後的第X段文本。
結果 4-dvcahsgdb 4-dvcahsgdb