首页 文章

Powershell难题:如何与CSV进行比较并从中提取匹配数据?

提问于
浏览
0

我在“名称”列中有一个带有名称列表的CSV文件 . 在第二个CSV中,我在“名称”列中有一个名称列表,在“employeeid”列中有他们的员工ID .

我想要的输出是这样的:在CSV1中取"name"列,将其与CSV2中的"name"列进行比较,无论哪里匹配,从CSV1的"name"列和CSV2中匹配的员工ID中取名,然后创建一个新的CSV3使用"name"列和相应的"employeeid"列 .

这是image describing my question

我已经开始使用import-csv将每个CSV作为变量拉出来,并且还使用带有select头的管道进行修补,但是我不理解在CSV1和CSV2之间使用用户名列匹配然后将其组合的必要逻辑使用CSV2的employeeID .

提前感谢您提供的任何指导 .

布赖恩

  • Updated 3/19
$csv1 = import-csv -Path "C:\csv1.csv" | select-object -ExpandProperty 'accountname' | Sort-Object | where {$_ -ne ""}
$csv2 = import-csv -Path "C:\csv2.csv" | select 'accountname','employeeid'

$accountNamesFromCSV2 = $csv2 | select-object -ExpandProperty accountname 
$compareTheTWo = Compare-Object -ReferenceObject $csv1 -DifferenceObject $accountNamesFromCSV2 -ExcludeDifferent -IncludeEqual -passThru

1 回答

  • 0

    这是周五所以我会很好 . 要在提示符下执行此操作:

    $csv2 = import-csv .\bar.csv; Import-CSV .\foo.csv | %{$name1 = $_.name;$id = ($csv2 | ?{$_.Name -eq $name1}).EmployeeID; Add-Member -InputObject $_ -MemberType NoteProperty -Name EmployeeID -Value $id; $_} | select Name, EmployeeID | Export-CSV .\result.csv
    

    或者,在脚本中更加人性化的版本:

    $csv2 = Import-CSV .\bar.csv
    $result = New-Object System.Collection.ArrayList
    foreach($user in (Import-CSV .\foo.csv)){
        $id = ($csv2 | Where-Object{$_.Name -eq $user.Name).EmplyeeID
        Add-Member -InputObject $user -MemberType NoteProperty -Name EmployeeID -Value $id
        $result.Add($user) | Out-Null
    }
    $result | Export-CSV .\result.csv -NoTypeInformation
    

相关问题