1. 程式人生 > >第二十二章 Linux文件比較,文本文件的交集、差集與求差:comm命令

第二十二章 Linux文件比較,文本文件的交集、差集與求差:comm命令

調整 得到 指定 顯示 兩個文件 not in 通過 需要 選項

第二十二章 Linux文件比較,文本文件的交集、差集與求差:comm命令

名詞解釋

comm 命令 可以用於兩個文件之間的比較,它有一些選項可以用來調整輸出,以便執行交集、求差、差集操作。

交集:打印兩個文件所共有的行

求差:打印出指定文件所包含的其不相同的行。

差集:打印出包含在一個文件中,但不包含在其他指定文件中的行。

語法

comm(選項)(參數)

選項

  • -1 :不顯示在第一個文件出現的內容;

  • -2 :不顯示在第二個文件中出現的內容;

  • -3 :不顯示同時在兩個文件中都出現的內容。

    ?

參數

  • 文件1 :指定要比較的第一個有序文件

  • 文件2 :指定要比較的第二個有序文件

    ?

實例

[root@ceshi comm]# cat aaa.txt 
aaa
bbb
ccc
ddd
eee
111
222
[root@ceshi comm]# cat bbb.txt 
bbb
ccc
aaa
hhh
ttt
jjj
[root@ceshi comm]# comm aaa.txt bbb.txt 
aaa
                bbb
                ccc
comm: file 2 is not in sorted order
        aaa
ddd
eee
comm: file 1 is not in sorted order
111
222
        hhh
        ttt
        jjj

輸出第一列:代表aaa.txt包含的內容

輸出第二列:代表bbb.txt包含的內容

輸出第三列:代表在aaa.txt和bbb.txt中相同的行。各列是以制表符(\t)作為定界符。

file 1 is not in sorted order :意思是文件裏邊的內容不是按順序排列的。沒有用關系。

交集:

打印兩個文件的交集,需要刪除第一列和第二列:

[root@ceshi comm]# comm aaa.txt bbb.txt -1 -2
bbb
ccc

求差:

打印出兩個文件中不相同的行,需要刪除第三列:

[root@ceshi comm]#  comm aaa.txt bbb.txt -3
aaa
        aaa
ddd
eee
111
222
        hhh
        ttt
        jjj
[root@ceshi comm]#  comm aaa.txt bbb.txt -3 | sed ‘s/^\t//‘
comm: file 2 is not in sorted order
comm: file 1 is not in sorted order
aaa
aaa
ddd
eee
111
222
hhh
ttt
jjj

sed ‘s/^\t//’ 是將制表符(\t)刪除,以便把兩列合並成一列。

差集:

通過刪除不需要的列,可以得到aaa.txt和bbb.txt的差集:

aaa.txt的差集

[root@ceshi comm]# comm aaa.txt bbb.txt -2 -3
aaa
ddd
eee
111
222

bbb.txt的差集

[root@ceshi comm]# comm aaa.txt bbb.txt -1 -3   
aaa
hhh
ttt
jjj

第二十二章 Linux文件比較,文本文件的交集、差集與求差:comm命令