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

2022年 10月 17日 发表评论
腾讯云3年/5年服务器:点击抢每日限量秒杀名额 阿里云服务器99元/年:速抢优惠名额
腾讯云双十一:点击速抢9999元代金券 阿里云双十一:点击速抢5580元满减券
腾讯云新客无门槛满减券:限量速抢 阿里云活动中心优惠券:点击速抢

如何在linux中使用diff和comm命令?针对这个问题,本文详细介绍了相应的分析和解决方法,希望能帮助更多想解决这个问题的伙伴找到更简单易行的方法。

代码功能:对比两个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 temp 1 . txt temp 2 . 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

2

0110126< 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'2011022820110301201103022011030320110304201103072011030820110309201103102011031120110314

可以看到,diff命令不但输出了temp2.txt文件的新增部分(20110304-20110314),也同时输出了两个文件的共同内容(20110228-20110303),从而导致了与预期不一致的结果。查看diff命令的man手册发现,diff的作用是比较两个文件的内容,并输出两个文件之间的差异,产生一个能够将两个文件互相转换的列表,但这个列表并不能100%保证是最小集。于是,以上例子中,可以看到diff给出了temp1.txt和temp2.txt文件的比较差异结果,但其中包含了两个文件的共同部分,因此与预期不一样。解决方法:用comm命令代替diff,例如:

代码如下:

$> comm -13 temp1.txt temp2.txt20110304201103072011030820110309201103102011031120110314

comm命令用来比较两个文件,具体用法:comm [-123] file1 file2-1 过滤file1独有的内容-2 过滤file2独有的内容-3 过滤file1和file2重复的内容备注:diff的输出格式,主要有以下几种:n1 a n3,n4n1,n2 d n3n1,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.txt2011022420110225201102282011030120110302$> cat temp2.txt2011022820110301201103022011030320110304$> diff temp1.txt temp2.txt > temp.diff$> cat temp.diff1,2d0< 20110224< 201102255a4,5> 20110303> 20110304# 使用temp.diff和temp1.txt恢复temp2文件$> patch -i temp.diff -o temp2_restore.txt temp1.txtLooks like a normal diff.done# 完成后temp2_restore和原temp2文件内容一致$> cat temp2_restore.txt2011022820110301201103022011030320110304

关于diff与comm命令怎么在linux中使用问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

小咸鱼

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: