Linux的差异比较文件和通讯指挥(找到新的内容)
这个项目中的一个奇怪的错误是由一行简单代码造成的。
代码函数:比较两个UNIX文本文件,查找和打印文本2,比文本1多。
例如,代码调用差异命令:
复制代码代码如下所示:
temp1.txt #的文件内容
猫temp1.txt美元>
二千零一十一万零二百二十四
二千零一十一万零二百二十五
二千零一十一万零二百二十八
二千零一十一万零三百零一
二千零一十一万零三百零二
temp2.txt #的文件内容
猫temp2.txt美元>
二千零一十一万零二百二十八
二千零一十一万零三百零一
二千零一十一万零三百零二
二千零一十一万零三百零三
二千零一十一万零三百零四
#的diff命令的输出
复制代码代码如下所示:
$ > diff temp1.txt temp2.txt
1,2d0
< 20110224
< 20110225
5a4,5
> 20110303
> 20110304
#输出temp2.txt文件的独特内容
$ > diff temp1.txt temp2.txt | grep>SED的 / / / G |
二千零一十一万零三百零三
二千零一十一万零三百零四
描述:输出结果中删除这两个文件的基本内容,只有输出的temp2.txt新的组成部分,与预期的结果一致。
然而,作为文件的temp1.txt含量的增加,不同的命令有不同的预期结果:
复制代码代码如下所示:
猫temp1.txt美元>
二千零一十万一千二百一十六
二千零一十万一千二百一十七
二千零一十万一千二百二十
二千零一十万一千二百二十一
二千零一十万一千二百二十三
二千零一十万一千二百二十四
二千零一十万一千二百二十七
二千零一十万一千二百二十八
二千零一十万一千二百二十九
二千零一十万一千二百三十
二千零一十万一千二百三十一
二千零一十一万零一百零三
二千零一十一万零一百零四
二千零一十一万零一百零五
二千零一十一万零一百零六
二千零一十一万零一百零七
二千零一十一万零一百一十
二千零一十一万零一百一十一
二千零一十一万零一百一十二
二千零一十一万零一百一十三
二千零一十一万零一百一十四
二千零一十一万零一百一十七
二千零一十一万零一百一十八
二千零一十一万零一百一十九
二千零一十一万零一百二十
二千零一十一万零一百二十一
二千零一十一万零一百二十四
二千零一十一万零一百二十五
二千零一十一万零一百二十六
二千零一十一万零一百二十七
二千零一十一万零一百二十八
二千零一十一万零一百三十一
二千零一十一万零二百零一
二千零一十一万零二百零二
二千零一十一万零二百零三
二千零一十一万零二百零四
二千零一十一万零二百零七
二千零一十一万零二百零八
二千零一十一万零二百零九
二千零一十一万零二百一十
二千零一十一万零二百一十一
二千零一十一万零二百一十四
二千零一十一万零二百一十五
二千零一十一万零二百一十六
二千零一十一万零二百一十七
二千零一十一万零二百一十八
二千零一十一万零二百二十一
二千零一十一万零二百二十二
二千零一十一万零二百二十三
二千零一十一万零二百二十四
二千零一十一万零二百二十五
二千零一十一万零二百二十八
二千零一十一万零三百零一
二千零一十一万零三百零二
二千零一十一万零三百零三
猫temp2.txt美元>
二千零一十一万零二百二十八
二千零一十一万零三百零一
二千零一十一万零三百零二
二千零一十一万零三百零三
二千零一十一万零三百零四
二千零一十一万零三百零七
二千零一十一万零三百零八
二千零一十一万零三百零九
二千零一十一万零三百一十
二千零一十一万零三百一十一
二千零一十一万零三百一十四
$ > 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的 / / / G |
二千零一十一万零二百二十八
二千零一十一万零三百零一
二千零一十一万零三百零二
二千零一十一万零三百零三
二千零一十一万零三百零四
二千零一十一万零三百零七
二千零一十一万零三百零八
二千零一十一万零三百零九
二千零一十一万零三百一十
二千零一十一万零三百一十一
二千零一十一万零三百一十四
可以看出,diff命令不仅输出的temp2.txt文件的新部分(20110304-20110314),而且输出这两个文件的一般内容(20110228-20110303),导致与预期不一致的结果。
我们看一下差异命令的手册,发现差异的作用是比较两个文件的内容,并输出两个文件之间的差异,导致一个可以将两个文件转换成另一个文件的列表,但是这个列表不能保证100%是最小的集合。
因此,在上面的例子中,我们可以看到,不同的给temp1.txt和temp2.txt文件比较的结果,但它包含两个文件的共同部分,所以它不同于预期。
uff1a解
随着通信命令取代差异,例如:
复制代码代码如下所示:
通信13 temp1.txt temp2.txt $ >
二千零一十一万零三百零四
二千零一十一万零三百零七
二千零一十一万零三百零八
二千零一十一万零三百零九
二千零一十一万零三百一十
二千零一十一万零三百一十一
二千零一十一万零三百一十四
该委员会的命令是用来比较两个文件,具体的用法:
{ 123 } comm file1 file2
1过滤器file1的独特内容
2过滤器file2的独特内容
3过滤器file1和file2重复
备注:uff1a
差异输出格式,主要如下:
N1,N3、N4
N1、N2和N3
N1、N2 C N3、N4
例如,1,2d0 5a4,5 1,55c1,11 等。
其中N1和N2是指第一个文件的行数,和N3和N4是指第二文件行数。代表加入,和D是删除代表删除,和C代表变化的整体变化。
使用差异输出,您可以使用补丁命令将一个文件还原到另一个文件中,例如:
复制代码代码如下所示:
猫temp1.txt美元>
二千零一十一万零二百二十四
二千零一十一万零二百二十五
二千零一十一万零二百二十八
二千零一十一万零三百零一
二千零一十一万零三百零二
猫temp2.txt美元>
二千零一十一万零二百二十八
二千零一十一万零三百零一
二千零一十一万零三百零二
二千零一十一万零三百零三
二千零一十一万零三百零四
> > temp.diff temp2.txt diff temp1.txt美元
猫temp.diff美元>
1,2d0
< 20110224
< 20110225
5a4,5
> 20110303
> 20110304
#使用temp.diff和temp1.txt temp2文件恢复
我temp.diff补丁o temp2_restore.txt temp1.txt $ >
看起来像一个正常的差异。
多恩
#的temp2_restore完成后与原temp2文件内容。
猫temp2_restore.txt美元>
二千零一十一万零二百二十八
二千零一十一万零三百零一
二千零一十一万零三百零二
二千零一十一万零三百零三
二千零一十一万零三百零四