比较对象在逐行比较案例中使用的逻辑是什么

时间:2013-12-04 07:05:52

标签: powershell

我有以下csv文件:

csv file 1               csv file 2
------------             ------------ 
1,2,3,4,5                1,2,3,4,6
a,b,c,d,e                11,12,3,4,5
a,b,c,d,e                11,122,3,4,15
a,b,c,d,e                01,2,3,4,6
a,b,c,d,e
11,12,3,4,5
11,12,3,4,15
01,2,3,4,5

我使用以下命令进行比较:

compare-object (gc test1.csv) (gc test2.csv) -SyncWindow 1

,输出为:

InputObject                                                 SideIndicator
-----------                                                 -------------
1,2,3,4,6                                                   =>
1,2,3,4,5                                                   <=
11,12,3,4,5                                                 =>
a,b,c,d,e                                                   <=
11,122,3,4,15                                               =>
a,b,c,d,e                                                   <=
a,b,c,d,e                                                   <=
a,b,c,d,e                                                   <=
11,12,3,4,5                                                 <=
11,12,3,4,15                                                <=
01,2,3,4,6                                                  =>
01,2,3,4,5                                                  <=

对于前3行,命令只是逐行进行比较,然后继续行只存在于文件1中,最后进行行01,2,3,4,6的比较

我只是想知道为什么它在处理前3行之后不继续使用第4行,是否有任何规则要考虑文件2中的01,2,3,4,6类似于文件1中的01,2,3,4,5?如果是这样,为什么输出不是:

InputObject                                                 SideIndicator
-----------                                                 -------------
1,2,3,4,6                                                   =>
1,2,3,4,5                                                   <=
a,b,c,d,e                                                   <=
a,b,c,d,e                                                   <=
a,b,c,d,e                                                   <=
a,b,c,d,e                                                   <=
11,12,3,4,5                                                 =>
11,12,3,4,5                                                 <=
11,122,3,4,15                                               =>
11,12,3,4,15                                                <=
01,2,3,4,6                                                  =>
01,2,3,4,5                                                  <=

2 个答案:

答案 0 :(得分:2)

我看到你正在使用SyncWindow参数,这就是命令行为“怪异”的原因。 Compare-Object文档描述了参数的功能:

  

<强> -SyncWindow <Int32>
  指定Compare-Object在查找对象集合中时匹配时检查的相邻对象的数量。当比较对象未在集合中的相同位置找到对象时,它会检查相邻对象。默认值为[Int32] :: MaxValue,这意味着Compare-Object会检查整个对象集合。

如果省略该参数,则命令会按预期比较对象。

但是当用参数查看示例时,我没有看到任何合理的解释原因。

答案 1 :(得分:2)

带有-SyncWindow 1

Compare-Object正在通过这两个文件移动一个对象窗口。

  • 首先,将文件1中的每一行与文件2中的相应行进行比较,但由于文件长度不同,文件2的窗口在到达最后一行时停止移动。
  • 从那时起,随着文件1的窗口继续移动,文件1中的每一行都与文件2中的最后一行进行比较。
  • 当到达文件1的末尾时,输出文件1和文件2的最后一个对象。