中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

diff與comm命令怎么在linux中使用

發布時間:2021-03-12 16:58:43 來源:億速云 閱讀:162 作者:Leah 欄目:系統運維

diff與comm命令怎么在linux中使用?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

代碼作用:比較兩個UNIX文本文件,找出并打印文本2比文本1新增加的內容。
代碼調用了diff命令,例如:
# temp1.txt文件內容

$> cat temp1.txt
20110224
20110225
20110228
20110301
20110302
# temp2.txt文件內容
$> cat temp2.txt
20110228
20110301
20110302
20110303
20110304

# diff命令輸出結果

代碼如下:


$> diff temp1.txt temp2.txt
1,2d0
< 20110224
< 20110225
5a4,5
> 20110303
> 20110304
# 只輸出temp2.txt文件獨有的內容
$> diff temp1.txt temp2.txt | grep "> " | sed 's/> //g'
20110303
20110304

說明:輸出結果去掉了兩個文件的共同內容,只輸出了temp2.txt的新增部分,和預想的結果一樣。
 
但是,隨著temp1.txt文件內容的增加,diff命令出現了不同預期的結果:

代碼如下:


$> cat temp1.txt
20101216
20101217
20101220
20101221
20101223
20101224
20101227
20101228
20101229
20101230
20101231
20110103
20110104
20110105
20110106
20110107
20110110
20110111
20110112
20110113
20110114
20110117
20110118
20110119
20110120
20110121
20110124
20110125
20110126
20110127
20110128
20110131
20110201
20110202
20110203
20110204
20110207
20110208
20110209
20110210
20110211
20110214
20110215
20110216
20110217
20110218
20110221
20110222
20110223
20110224
20110225
20110228
20110301
20110302
20110303
$> cat temp2.txt
20110228
20110301
20110302
20110303
20110304
20110307
20110308
20110309
20110310
20110311
20110314
$> diff temp1.txt temp2.txt
1,55c1,11
< 20101216
< 20101217
< 20101220
< 20101221
< 20101223
< 20101224
< 20101227
< 20101228
< 20101229
< 20101230
< 20101231
< 20110103
< 20110104
< 20110105
< 20110106
< 20110107
< 20110110
< 20110111
< 20110112
< 20110113
< 20110114
< 20110117
< 20110118
< 20110119
< 20110120
< 20110121
< 20110124
< 20110125
< 20110126
< 20110127
< 20110128
< 20110131
< 20110201
< 20110202
< 20110203
< 20110204
< 20110207
< 20110208
< 20110209
< 20110210
< 20110211
< 20110214
< 20110215
< 20110216
< 20110217
< 20110218
< 20110221
< 20110222
< 20110223
< 20110224
< 20110225
< 20110228
< 20110301
< 20110302
< 20110303
---
> 20110228
> 20110301
> 20110302
> 20110303
> 20110304
> 20110307
> 20110308
> 20110309
> 20110310
> 20110311
> 20110314
$> diff temp1.txt temp2.txt | grep "> " | sed 's/> //g'
20110228
20110301
20110302
20110303
20110304
20110307
20110308
20110309
20110310
20110311
20110314

可以看到,diff命令不但輸出了temp2.txt文件的新增部分(20110304-20110314),也同時輸出了兩個文件的共同內容(20110228-20110303),從而導致了與預期不一致的結果。
查看diff命令的man手冊發現,diff的作用是比較兩個文件的內容,并輸出兩個文件之間的差異,產生一個能夠將兩個文件互相轉換的列表,但這個列表并不能100%保證是最小集。
于是,以上例子中,可以看到diff給出了temp1.txt和temp2.txt文件的比較差異結果,但其中包含了兩個文件的共同部分,因此與預期不一樣。
 
解決方法:
用comm命令代替diff,例如:

代碼如下:


$> comm -13 temp1.txt temp2.txt
20110304
20110307
20110308
20110309
20110310
20110311
20110314

comm命令用來比較兩個文件,具體用法:
comm [-123] file1 file2
-1 過濾file1獨有的內容
-2 過濾file2獨有的內容
-3 過濾file1和file2重復的內容
 
備注:
diff的輸出格式,主要有以下幾種:
n1 a n3,n4
n1,n2 d n3
n1,n2 c n3,n4
例如"1,2d0" "5a4,5" "1,55c1,11"等。
其中n1和n2指第一個文件的行數,n3和n4指第二個文件的行數。"a"代表add增加,"d"代表delete刪除,"c"代表change整塊變動。
有了diff的輸出結果,可以使用patch命令將一個文件恢復成另一個,例如:

代碼如下:


$> cat temp1.txt
20110224
20110225
20110228
20110301
20110302
$> cat temp2.txt
20110228
20110301
20110302
20110303
20110304
$> diff temp1.txt temp2.txt > temp.diff
$> cat temp.diff
1,2d0
< 20110224
< 20110225
5a4,5
> 20110303
> 20110304
# 使用temp.diff和temp1.txt恢復temp2文件
$> patch -i temp.diff -o temp2_restore.txt temp1.txt
Looks like a normal diff.
done
# 完成后temp2_restore和原temp2文件內容一致
$> cat temp2_restore.txt
20110228
20110301
20110302
20110303
20110304

關于diff與comm命令怎么在linux中使用問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

三穗县| 巴楚县| 余庆县| 达州市| 华蓥市| 嘉祥县| 寿阳县| 临潭县| 灵川县| 万荣县| 涟源市| 方山县| 长武县| 太谷县| 新丰县| 遂宁市| 杂多县| 安新县| 集贤县| 黎城县| 阿拉善盟| 衡山县| 肇庆市| 竹山县| 浠水县| 麻城市| 古交市| 静海县| 施秉县| 阜新市| 腾冲县| 社旗县| 皮山县| 武平县| 正镶白旗| 扶风县| 神农架林区| 景东| 宁都县| 台中市| 江都市|