比较2 csv以在Powershell中创建唯一项目列表

时间:2014-08-22 13:53:03

标签: powershell

我有2个csv文件,需要创建第3个。

csv_1 (仅限1列)

USERNAME
guy1
guy2
guy3

csv_2

"ID","USERNAME","GROUPU"
"1","guyA","Default"
"2","guy1","Default"
"3","guyB","Default"
"4","guy3","Default"
"5","guyC","Default"

对于比较这两个表的输出,我希望看到:

USERNAME,ID
guy1,2
guy3,4

我尝试了这个并且它倾倒了太多数据(多次列出所有条目)

$file1 = Import-Csv csv_1.csv
$file2 = Import-Csv csv_2.csv

foreach ($line in $file1){
    $U1 = $line.User
    foreach ($line in $file2)
        $U2 = $line.USERNAME
        $I2 = $line.ID
        If ($U1 = $U2){
            $x = $U2+","+$I2
            ac temp.csv$x
            }
        }
    }

我在ac temp.csv $ x行之后添加了一个中断:外线但是它只多次列出了1个条目。

我也尝试这个(基于this条目):

$file1 = Import-Csv csv_1.csv
$file2 = Import-Csv csv_2.csv

ForEach($Record in $file1){
    $MatchedValue = (Compare-Object $file2 $Record -Property "USERNAME" -IncludeEqual -ExcludeDifferent -PassThru).value
    $Record = Add-Member -InputObject $Record -Type NoteProperty -Name "SQLID" -Value $MatchedValue
    }
$file1 #|Export-Csv ".\Combined.csv" -NoTypeInformation

但是在SQLID列中没有得到任何内容,它包含了$ file1中不在$ file2中的一些值。我认为缺少SQLID值是因为我需要在那里添加一个变量(-value只是$ matchedValue,它只是来自$ file1的行),但我不确定如何从正确的变量中获取变量记录在$ file2中。

建议?

1 个答案:

答案 0 :(得分:0)

对于$file1中的每个条目,请测试$file2中的条目是否具有相同的USERNAME属性值。如果是,请选择USERNAME和ID属性,并将条目添加到可以写回最终csv文件的集合中:

$file1 = Import-Csv .\csv_1.csv
$file2 = Import-Csv .\csv_2.csv

$users = @()

foreach($u in $file1)
{
    $u2 = $file2 |Where-Object {$_.USERNAME -eq $u.USERNAME}|Select USERNAME,ID -First 1 
    if($u2)
    { $users += $u2 }
}

$users|Export-Csv -Path .\csv_3.csv -NoTypeInformation -Force