我已經看到了幾個使用 PowerShell 比較 2 個單獨 csv 檔案中的列的示例,但是有沒有辦法比較同一個 csv 中的 2 個列,回圈遍歷每條記錄以找到匹配的記錄?結果將是創建一個輸出匹配值的新列。如果不匹配,則新列中的輸出將為空或零。謝謝你。
uj5u.com熱心網友回復:
Select-Object與計算屬性一起使用(將感興趣的列名替換為Col1and Col2,并可選擇選擇不同的新列名而不是Match; 管道以Export-Csv重新匯出回 CSV 檔案):
如果要比較的列值在同一行上:
Import-Csv in.csv |
Select-Object *,
@{ Name='Match'; Expression={ if ($_.Col1 -eq $_.Col2) { $_.Col1 } } }
如果應在所有行之間比較列值:
# Load all rows as objects into memory.
$allRows = Import-Csv in.csv
# Create a hash set of all distinct Col1 values.
$col1LookupValues = [System.Collections.Generic.HashSet[string]]::new(
[string[]] $allRows.Col1,
[StringComparer]::CurrentCultureIgnoreCase
)
$allRows |
Select-Object *,
@{ Name='Match'; Expression={
if ($col1LookupValues.Contains($_.Col2)) { $_.Col2 }
} }
注意:[System.Collections.Generic.HashSet[string]]實體的使用使查找變得高效。
$col1LookupValues = [string[]] $allRows.Col1如果性能不是問題并且行數足夠小,你可以僥幸逃脫if ($col1LookupValues -contains $_.Col2)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/444136.html
標籤:电源外壳
上一篇:由于執行策略,VisualStudio無法執行Powershell腳本
下一篇:在AD組下搜索用戶成員及其部門
