一天一個(gè)shell命令 文本操作系列-comm命令用法
comm命令比較兩個(gè)已排序文件每行數(shù)據(jù)的差異,并將其結(jié)果顯示出來(lái),如果沒(méi)有指定任何參數(shù),comm命令讀取這兩個(gè)文件,然后生成三列輸出:1>僅在file1中出現(xiàn)的行2>僅在file2中出現(xiàn)的行3>在兩個(gè)文件中都存在的行。
如果為文件名之一指定 -(減號(hào)),則 comm 命令會(huì)從標(biāo)準(zhǔn)輸入設(shè)備讀取數(shù)據(jù)。
題外話:說(shuō)到比較文件,過(guò)來(lái)人都用過(guò)Beyond Compare,老版本時(shí)候,我們只能右鍵選中用于比較的文件,再選中被比較文件,對(duì)比。 如今他有了豐富的界面,支持linux上比較文件。 干什么用的?svn管理不善的時(shí)候,版本控制做的不好的時(shí)候,你就會(huì)期望他了。這都是經(jīng)驗(yàn)- -!
回到正題:在shell中,也有個(gè)這么個(gè)命令---comm。 comm可用于兩個(gè)文件之間的比較??梢杂糜谖募谋容^,交集,求差以及差集操作。
這個(gè)定義其實(shí)不夠詳細(xì),應(yīng)該是 comm逐行比較已排序的文件1和文件2.
全稱:
(慚愧)沒(méi)有找到合適的全稱。 com 很明顯是compare開(kāi)頭,m為mode。望高手指正。
查看—help
用法:comm [選項(xiàng)]... 文件1 文件2
逐行比較已排序的文件文件1 和文件2。
如果不附帶選項(xiàng),程序會(huì)生成三列輸出。第一列包含文件1 特有的行,第二列包含 文件2 特有的行,而第三列包含兩個(gè)文件共有的行。
-1 不輸出文件1 特有的行
-2 不輸出文件2 特有的行
-3 不輸出兩個(gè)文件共有的行
--check-order 檢查輸入是否被正確排序,即使所有輸入行均成對(duì)
--nocheck-order 不檢查輸入是否被正確排序
--output-delimiter=STR 依照STR 分列
解讀:
1. --check-order
該命令默認(rèn)情況下 如果希望不檢驗(yàn)排序,可以--nocheck-order。
2. --output-delimiter=STR
STR 就是個(gè)表達(dá)式。 可以是任何非特殊字符
3. -1,-2
可以寫成 -12 與普通命令用起來(lái)一樣
實(shí)例:
1.建立A.txt
加入元素
apple
orange
gold
silver
steel
iron
2. 建立B.txt
加入元素
orange
gold
cookies
carrot
可以嘗試直接比較: comm A.txt B.txt
你會(huì)發(fā)現(xiàn)提示一個(gè)錯(cuò)誤,沒(méi)有排序。
3. 排序
sort A.txt -o A.txt; sort B.txt -o B.txt
4. 比較
$comm A.txt B.txt
apple
carrot
cookies
gold
iron
orange
silver
steel
結(jié)果實(shí)際為3列 其中第一列是文件1特有 -1表示刪除第一列
第二列是文件2特有的 -2代表刪除第二列
第三列代表共同有的 -3代表刪除共有的列
4.1 打印交集:
$comm –12 A.txt B.txt
4.2 打印兩個(gè)文件中不同的行
$comm –3 A.txt B.txt
補(bǔ)充個(gè)小修改,兩列不好看,用sed刪除行首的\t
$comm –3 A.txt B.txt | sed 's/^\t//'
實(shí)戰(zhàn):
comm在實(shí)戰(zhàn)中,只會(huì)在一些非常特殊的場(chǎng)景中用到。 比較簡(jiǎn)單,就不舉例了。(筆者遇到的場(chǎng)景中,仍然堅(jiān)持有更好的方案時(shí)候,不用這個(gè)命令,呵呵)。
本文出自 “書生” 博客
相關(guān)文章
shell編程基礎(chǔ)之認(rèn)識(shí)與學(xué)習(xí)BASH
本文介紹下,shell基礎(chǔ)編程中有關(guān)bash的相關(guān)知識(shí),有需要的朋友參考學(xué)習(xí)下2013-11-11linux踢出遠(yuǎn)程登錄用戶命令(總結(jié)篇)
本文給大家總結(jié)了linux踢出遠(yuǎn)程登錄用戶命令,通過(guò)linux命令介紹了 tty 踢出登錄的操作方法,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2024-01-01利用Shell腳本循環(huán)讀取文件中每一行的方法詳解
讀取文件是我們?cè)谌粘9ぷ髦薪?jīng)常遇到的一個(gè)需求,下面這篇文章主要給大家介紹了關(guān)于利用Shell腳本循環(huán)讀取文件中每一行的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)下吧。2017-09-09shell腳本實(shí)現(xiàn)Hbase服務(wù)的監(jiān)控報(bào)警和自動(dòng)拉起問(wèn)題
這篇文章主要介紹了shell腳本實(shí)現(xiàn)Hbase服務(wù)的監(jiān)控報(bào)警和自動(dòng)拉起,主要是通過(guò)服務(wù)名監(jiān)控和端口監(jiān)控,通過(guò)企業(yè)微信消息通知腳本,對(duì)此內(nèi)容感興趣的朋友跟隨小編一起看看吧2022-11-11用shell腳本在mysql表中批量插入數(shù)據(jù)的方法
這篇文章主要介紹了用shell腳本在mysql表中批量插入數(shù)據(jù)的方法,需要的朋友可以參考下2014-03-03shell自動(dòng)拉取鏡像并運(yùn)行容器的shell腳本
本文主要介紹了shell自動(dòng)拉取鏡像并運(yùn)行容器的shell腳本,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06Linux中使用expect腳本實(shí)現(xiàn)遠(yuǎn)程機(jī)器自動(dòng)登錄
本篇文章給大家介紹在Linux中使用expect腳本實(shí)現(xiàn)遠(yuǎn)程機(jī)器自動(dòng)登錄,前提是要?jiǎng)?chuàng)建一個(gè)expec腳本ssh_expect,接下來(lái)定義一些命令別名等,下面跟著腳本之家小編一起學(xué)習(xí)學(xué)習(xí)吧2015-09-09CCKiller:Linux輕量級(jí)CC攻擊防御工具,秒級(jí)檢查、自動(dòng)拉黑和釋放
這篇文章主要介紹了CCKiller:Linux輕量級(jí)CC攻擊防御工具,秒級(jí)檢查、自動(dòng)拉黑和釋放,需要的朋友可以參考下2016-02-02shell判斷文件,目錄是否存在或者具有權(quán)限的代碼
因shell還不是很熟練,所以做此筆記,方便查看,學(xué)習(xí)shell的朋友可以參考下2013-06-06