《Linux Shell 腳本攻略(第 2 版)》讀書(shū)筆記
comm
命令可用于兩個(gè)文件之間的比較遗契∠驳拢可執(zhí)行如下操作
- 交集(intersection):打印出兩個(gè)文件所共有的行。
- 求差(difference):打印出指定文件所包含的且互不相同的那些行颖医。
- 差集(set difference):打印出包含在文件 A 中俏竞,但不包含在其他指定文件中的那些行。
注意:comm
必須使用排過(guò)序的文件作為輸入蜗侈。
現(xiàn)有 A.txt、B.txt 兩個(gè)文件
$ sort A.txt -o A.txt ; sort B.txt -o B.txt # 排序
$ cat A.txt
apple
gold
iron
orange
silver
steel
$ cat B.txt
carrot
cookies
gold
orange
執(zhí)行不帶任何選項(xiàng)的 comm 命令
$ comm A.txt B.txt
apple
carrot
cookies
gold
iron
orange
silver
steel
- 第一列睡蟋,包含只在 A.txt 文件中出現(xiàn)的行踏幻。
- 第二列,包含只在 B.txt 文件中出現(xiàn)的行戳杀。
- 第三列该面,包含 A.txt 和 B.txt 中相同的行。
- 各列以制表符(
\t
)作為定界符信卡。
打印兩個(gè)文件的交集
$ comm -1 -2 A.txt B.txt
gold
orange
-
-1
刪除第一列 -
-2
刪除第二列
打印兩個(gè)文件中不相同的行(求差)
$ comm -3 A.txt B.txt
apple
carrot
cookies
iron
silver
steel
# 生成規(guī)范的輸出
$ comm -3 A.txt B.txt | sed 's/^\t//'
apple
carrot
cookies
iron
silver
steel
# OS X 用下面這個(gè)命令
$ comm -3 A.txt B.txt | tr "\t" "\0"
sed 's/^\t//'
:sed 是一個(gè)“非交互式的”面向字符流的編輯器隔缀。
-
s
表示替換(substitute)。 -
/^\t/
匹配行前的\t
(^
是行首標(biāo)記)傍菇。 -
//
用來(lái)替換行首的\t
猾瘸。
差集
- A.txt 的差集
$ comm -2 -3 A.txt B.txt
# 刪除第二列和第三列
- B.txt 的差集
$ comm -1 -3 A.txt B.txt
# 刪除第一列和第三列