使用powershell比较两个csv并返回匹配和不匹配的值

时间:2014-09-02 04:45:50

标签: powershell csv

我有两个csv文件,我想检查username.csv中的用户是否与userdata.csv相匹配 到output.csv。如果不匹配,则在output.csv中单独返回名称

对于Ex:用户数据包含3列

UserName,column1,column2
Hari,abc,123
Raj,bca,789
Max,ghi,123
Arul,987,thr
Prasad,bxa,324

username.csv包含用户名

Hari
Rajesh

Output.csv应包含

Hari,abc,123
Rajesh,NA,NA

如何实现这一目标。感谢

很抱歉。

$Path = "C:\PowerShell"
$UserList = Import-Csv -Path "$($path)\UserName.csv"
$UserData = Import-Csv -Path "$($path)\UserData.csv"

foreach ($User in $UserList)
{
    ForEach ($Data in $UserData)
    {
        If($User.Username -eq $Data.UserName)
        {
            # Process the data

            $Data
        }
    }
}

这只返回匹配的值。我还需要在输出中添加不匹配的值 文件。感谢。

1 个答案:

答案 0 :(得分:3)

这样的事情会起作用:

$Path = "C:\PowerShell"
$UserList = Import-Csv -Path "$($path)\UserName.csv"
$UserData = Import-Csv -Path "$($path)\UserData.csv"
$UserOutput = @()

    ForEach ($name in $UserList)
    {

        $userMatch = $UserData | where {$_.UserName -eq $name.usernames}
        If($userMatch)
        {
            # Process the data

            $UserOutput += New-Object PsObject -Property @{UserName =$name.usernames;column1 =$userMatch.column1;column2 =$userMatch.column2}
        }
        else
        {
        $UserOutput += New-Object PsObject -Property @{UserName =$name.usernames;column1 ="NA";column2 ="NA"}
        }
    }
$UserOutput | ft

循环遍历用户列表中的每个名称。第9行搜索用户数据CSV以查找匹配的用户名,如果发现它将该用户的用户数据添加到输出中,如果未找到匹配项,则会将用户名添加到输出中,并在两列中包含NA。

必须更改你的userList csv:

usernames
Hari
Rajesh

预期产出:

UserName                          column1                           column2                         
--------                          -------                           -------                         
Hari                              abc                               123                             
Rajesh                            NA                                NA