在 Powershell 中比较两个列表

问题描述 投票:0回答:3

我刚刚开始使用 powershell。我有两个列表,每个列表有 132 条记录和 134 条记录。它们有 85 条共同记录,我想获取单独列表中的 list1 中但不在 list2 中的值(例如 list_out1)以及另一个列表中的 list2 但不在 list1 中的值(例如 list_out2)。我终于想打印list_out1和list_out2。我尝试按照这个答案中给出的方式执行操作,但在尝试打印 list_out1 时它给了我 list1 中的所有值。另外,我尝试使用 foreach 循环和 if 条件如下,它还为我提供了 list1 中的所有值来打印 list_out1。

foreach ($i in $list1)
{
   if($list2 -notcontains $i) {
      $i
    }
}

我不知道我哪里做错了。这个逻辑对我来说似乎没问题。如果我错了请纠正我。

powershell scripting powershell-3.0
3个回答
8
投票

使用

Compare-Object
就是您所追求的。假设你做了
$List1.Item
或类似的事情。

$MissingGroups = Compare-Object -ReferenceObject $List1 -DifferenceObject $List2 -Property $Item | Where-Object{$_.sideIndicator -eq "<="}

2
投票

你是这个意思吗? 如果您只想屏幕,只需删除 Out-File 内容即可。

获取单独列表中list1中但不在list2中的值 说 list_out1

$List1 = 'Hello','World','Today','FromList1'
$List2 = 'Hello','World','Today','FromList2'

# get the values which are in list1
ForEach($Item in $List1)
{
    If($List2 -notcontains $Item)
    {$Item | Out-File -FilePath D:\Temp\ListOne.txt -Append} 
} 

# Results in the file

FromList1

并且列表 2 中但不在另一个列表中的列表 1 中的值说 列表输出2。

ForEach($Item in $List2)
{
    If($List1 -notcontains $Item)
    {$Item | Out-File -FilePath D:\Temp\ListTwo.txt -Append} 
} 

# Results in the file

FromList2

1
投票

我没有看到你自己链接的问答有什么问题。

使用 postanote 的好 answer

Compare-Object

中的示例列表
## Q:\Test\2018\11\15\SO_53313785.ps1
$List1 = 'Hello','World','Today','FromList1'
$List2 = 'Hello','World','Today','FromList2'
compare $List1 $list2

此返回(对

Copare-Object
使用别名比较,并依赖于 -ReferenceObject 的位置参数 1 和 -DifferenceObject 的 2)

InputObject SideIndicator
----------- -------------
FromList2   =>
FromList1   <=

您可以使用

SideIndicator
来确定输出应附加到哪个文件。

Compare-Object -ReferenceObject $List1 -DifferenceObject $List2 |
    ForEach-Object -Begin {
        Remove-item '.\UniqueToList*.txt'
    } -Process {
       if ($_.SideIndicator -eq '<='){
           Add-Content -Path '.\UniqueToList1.txt' -Value $_.InputObject
       } else {
           Add-Content -Path '.\UniqueToList2.txt' -Value $_.InputObject
       }
    }

如果是更复杂的列表对象,您可以使用

Export-Csv
-Append
参数来代替。

© www.soinside.com 2019 - 2024. All rights reserved.