【问题标题】:Compare-Object Returns nothing powershell比较对象不返回任何东西
【发布时间】:2018-11-26 14:34:52
【问题描述】:

所以我有这两个文件“file1.txt”和“file2.txt”的列表,例如:

文件 1
番茄
番茄酱
芥末

文件 2:
番茄
芥末

然后我需要采取仅在第一个文件中的行,所以我尝试了

Compare-Object $(Get-Content file1.txt) $(Get-Content file2.txt)

它仍然显示所有的行,所以我选择了属性

Compare-Object $(Get-Content file1.txt) $(Get-Content file2.txt) -Property inputObject

我得到了这个结果:

inputObject SideIndicator
----------- -------------
            <=           

我被困在网上,我从网上搜索得到的唯一结果是人们在添加“-Property”过滤器后得到了正确的结果。

提前致谢!

【问题讨论】:

  • 当我运行你的命令时,我得到了完全预期的结果。 (盐=>和番茄酱
  • @Olaf 这就是它应该如何工作的,所以我觉得你可以用这个命令来做这件事并不奇怪。我正在从其他命令的输出中获取列表,所以可能是这样?
  • 当我在这两个数组上运行比较对象时,我得到Salt =&gt;Ketchup &lt;= 作为输出。这就是它应该显示的。 [咧嘴]
  • 我怀疑任何比较对象都存在inputObject 属性,因为它们是数组。试试(Compare-Object $(Get-Content file1.txt) $(Get-Content file2.txt)|Where-Object {$_.SideIndicator -eq '&lt;='}).InputObject
  • @Spina97 - 酷!很高兴知道你成功了……[grin]

标签: powershell compare powershell-2.0 powershell-3.0


【解决方案1】:

所以我遇到了两个问题(感谢@Olaf、@Lee_Dailey 和@JosefZ 的帮助!)

第一个问题是我从命令创建的列表中获取数据,所以它有很多空格,通过运行以下命令集解决了这些问题:

(gc file1.txt) | ? {$_.trim() -ne "" } | set-content file1.txt
(gc file2.txt) | ? {$_.trim() -ne "" } | set-content file2.txt

(gc file1.txt) | ? {$_.trim() -ne " " } | set-content file1.txt
(gc file2.txt) | ? {$_.trim() -ne " " } | set-content file2.txt

之后我需要这样做(如@JosefZ 建议的那样)以获得正确的结果集:

(Compare-Object $(Get-Content file1.txt) $(Get-Content file2.txt)|Where-Object {$_.SideIndicator -eq '<='}).InputObject

真的很感谢你们三个,我一个人永远无法找到答案!

【讨论】:

    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 2023-03-28
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多