我有兩個 txt 檔案。兩者都包含用戶名串列:
清單 1:
user1
user2
user3
清單 2:
user1
user2
user7
我想比較這兩個串列。我想知道兩個串列中都不存在哪些用戶。所以這種情況下的輸出應該是這個串列:
最終名單:
user3
user7
這是我的代碼:
$list1 = get-content -Path "C:\list1.txt"
$list2 = get-content -Path "C:\list2.txt"
$endlist = foreach ($item in $list1)
{
if ($item -notmatch $list2)
{
[PSCustomObject]@{
Name = $item
}
}
$endlist |Out-file "C:\endlist.txt"
我究竟做錯了什么?
uj5u.com熱心網友回復:
通常你會使用Compare-Object這個:
$list1 = 'user1', 'user2', 'user3'
$list2 = 'user1', 'user2', 'user7'
(Compare-Object $list1 $list2).InputObject # => user3, user7
如果您想手動進行比較,并且由于您想知道任一串列唯一的物件,則需要兩個回圈并使用包含運算子(-notin或-notcontains在本例中):
$list1 = (Get-Content list1.txt).Trim()
$list2 = (Get-Content list2.txt).Trim()
& {
foreach($i in $list1) {
if($i -notin $list2) { $i }
}
foreach($i in $list2) {
if($i -notin $list1) { $i }
}
} | Out-File "endlist.txt"
uj5u.com熱心網友回復:
作為現有作業解決方案的補充,這里是另一個使用 a 的解決方案,HashSet它可能比 更快Compare-Object:
[Collections.Generic.HashSet[string]] $list1 = Get-Content list1.txt
[Collections.Generic.HashSet[string]] $list2 = Get-Content list2.txt
$list1.SymmetricExceptWith($list2)
$list1
輸出:
user7
user3
HashSet的奇怪命名1 SymmetricExceptWith方法將第一個集合修改為僅包含對任一集合唯一的元素。
1)數學術語是對稱差分。
uj5u.com熱心網友回復:
使用比較物件
Compare-Object -ReferenceObject $list1 -DifferenceObject $list2 | Select-Object -ExpandProperty InputObject
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/466232.html
