日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

两个文件比较之comm命令

發(fā)布時間:2023/12/19 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 两个文件比较之comm命令 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

comm命令可用于兩個文件之間的比較。它有很多不錯的選項(xiàng)可用來調(diào)整輸出,以便我們執(zhí)
行交集、求差(difference)以及差集操作。
? 交集:打印出兩個文件所共有的行。
? 求差:打印出指定文件所包含的且互不相同的那些行。
? 差集:打印出包含在文件a中,但不包含在其他指定文件中的那些行。

假設(shè)現(xiàn)在有兩個文件a和b,內(nèi)容分別是:a(1,2,3),b(3,4,5)。那么,對這兩個文件進(jìn)行操作的結(jié)果如下。
交集:3。
求差:1,2,4,5。
差集(a):1,2。

需要注意的是comm必須使用排過序的文件作為輸入。請看看下面的例子:

[root@host1 shell]# echo -e "1\n3\n8\n2" > a.txt [root@host1 shell]# cat a.txt 1 3 8 2 [root@host1 shell]# echo -e "1\n5\n7\n2" > b.txt [root@host1 shell]# cat b.txt 1 5 7 2 [root@host1 shell]# sort a.txt -o a.txt ; sort b.txt -o b.txt

(1) 首先執(zhí)行不帶任何選項(xiàng)的comm:

[root@host1 shell]# comm a.txt b.txt 12 357 8

輸出的第一列包含只在a.txt中出現(xiàn)的行(a的差集),第二列包含只在b.txt中出現(xiàn)的行(b的差集),第三列
包含a.txt和b.txt中相同的行(交集)。各列以制表符(\t)作為定界符。

(2) 為了打印兩個文件的交集,我們需要刪除第一列和第二列,只打印出第三列:

[root@host1 shell]# comm -1 -2 a.txt b.txt 1 2

(3) 打印出兩個文件中不相同的行:

[root@host1 shell]# comm -3 a.txt b.txt 357 8

在這次的輸出中,那些唯一出現(xiàn)的行使得列中出現(xiàn)了空白字段。所以這兩列在同一
行上不會同時都出現(xiàn)內(nèi)容。為了提高輸出結(jié)果的可用性,需要刪除空白字段,將兩
列合并成一列:

3
5
7
8

(4) 要生成規(guī)范的輸出,得使用下面的命令:

[root@host1 shell]# comm -3 a.txt b.txt | sed 's/^\t//' 3 5 7 8

(5) 通過刪除不需要的列,我們就可以分別得到a.txt和b.txt的差集。
a.txt的差集
$ comm a.txt b.txt -2 -3
-2 -3 刪除第二列和第三列。
b.txt的差集
$ comm a.txt b.txt -1 -3
-1 -3 刪除第一列和第三列。

工作原理:

comm的命令行選項(xiàng)可以按照需求對輸出進(jìn)行格式化,例如:
? -1 從輸出中刪除第一列;
? -2 從輸出中刪除第二列;
? -3 從輸出中刪除第三列。
  在生成統(tǒng)一輸出時,sed命令通過管道獲取comm的輸出。它刪除行首的 \t字符。sed中的s
表示替換(substitute)。/^\t/ 匹配行前的 \t(^是行首標(biāo)記)。//(兩個/操作符之間沒有任何
字符)是用來替換行首的\t的字符串。如此一來,就刪除了所有行首的\t。
  差集操作允許你比較兩個文件,打印出只在a.txt或b.txt中出現(xiàn)的行。當(dāng)a.txt和b.txt作為comm
命令的參數(shù)時,輸出中的第一列是a.txt相對于b.txt的差集,第二列是b.txt相對于a.txt的差集。

轉(zhuǎn)載于:https://www.cnblogs.com/01-single/p/6950645.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的两个文件比较之comm命令的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。