版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/SunnyYoona/article/details/51614572
1. 簡介
comm指令可以用于兩個檔案之間的比較,它有一些選項可以用來調整輸出,以便執行交集、求差、以及差集操作。
- 交集:列印出兩個檔案所共有的行。
- 求差:列印出指定檔案所包含的且不相同的行。
- 差集:列印出包含在一個檔案中,但不包含在其他指定檔案中的行。
2. 文法
-
comm (選項) (參數)
3. 選項
- -1:不顯示在第一個檔案出現的内容
- -2:不顯示在第二個檔案中出現的内容
- -3:不顯示同時在兩個檔案中都出現的内容
4. 參數
- 檔案1:指定要比較的第一個有序檔案
- 檔案2:指定要比較的第二個有序檔案
5. 執行個體
-
xiaosi@Qunar:~/company/sh$ cat a.txt
-
a
-
b
-
d
-
e
-
f
-
g
-
h
-
l
-
v
-
xiaosi@Qunar:~/company/sh$ cat b.txt
-
b
-
d
-
g
-
l
-
n
-
r
-
t
-
y
(1)無選項:輸出的第一列隻包含在a.txt中出現的行,第二列包含在b.txt中出現的行,第三列同時包含在a.txt和b.txt中的行。各列是以制表符(\t)作為定界符。
-
xiaosi@Qunar:~/company/sh$ comm a.txt b.txt
-
a
-
b
-
d
-
e
-
f
-
g
-
h
-
l
-
n
-
r
-
t
-
v
-
y
(2)-1選項(可以了解為-1删除第一列,-2删除第二列):不顯示隻在第一個檔案出現的内容,輸出的第一列隻包含在b.txt中出現的行,第二列同時包含在a.txt和b.txt中的行
-
xiaosi@Qunar:~/company/sh$ comm -1 a.txt b.txt
-
b
-
d
-
g
-
l
-
n
-
r
-
t
-
y
(3)交集:第三列就是交集的内容,隻需删除第一列和第二列内容即可
-
xiaosi@Qunar:~/company/sh$ comm -1 -2 a.txt b.txt
-
b
-
d
-
g
-
l
(4)求差:列印出兩個檔案中不相同的行,需要删除第三列,sed 's/^\t//' 是将制表符(\t)删除,以便把兩列合并成一列。
-
xiaosi@Qunar:~/company/sh$ comm -3 a.txt b.txt
-
a
-
e
-
f
-
h
-
n
-
r
-
t
-
v
-
y
-
xiaosi@Qunar:~/company/sh$ comm -3 a.txt b.txt | sed 's/^\t//'
-
a
-
e
-
f
-
h
-
n
-
r
-
t
-
v
-
y
(5)差集
a.txt的差集
-
xiaosi@Qunar:~/company/sh$ comm a.txt b.txt -2 -3
-
a
-
e
-
f
-
h
-
v
b.txt差集
-
xiaosi@Qunar:~/company/sh$ comm a.txt b.txt -1 -3
-
n
-
r
-
t
-
y