使用powershell比较两个csv,并返回匹配值和非匹配值
我有两个csv文件,我想检查username.csv中的用户与userdata.csv copy的匹配情况使用powershell比较两个csv,并返回匹配值和非匹配值,powershell,csv,Powershell,Csv,我有两个csv文件,我想检查username.csv中的用户与userdata.csv copy的匹配情况 到output.csv。如果不匹配,则在output.csv中单独返回名称 例如:用户数据包含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,1
到output.csv。如果不匹配,则在output.csv中单独返回名称 例如:用户数据包含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
}
}
}
这只返回匹配的值。我还需要在输出中添加不匹配的值
文件谢谢。像这样的东西会有用的:
$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行在userdata CSV中搜索匹配的用户名。如果找到匹配的用户名,则将该用户的用户数据添加到输出中。如果未找到匹配的用户名,则将用户名添加到输出中,并在两列中使用NA
必须更改您的用户列表csv:
usernames
Hari
Rajesh
预期产出:
UserName column1 column2
-------- ------- -------
Hari abc 123
Rajesh NA NA
类似这样的方法会奏效:
$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行在userdata CSV中搜索匹配的用户名。如果找到匹配的用户名,则将该用户的用户数据添加到输出中。如果未找到匹配的用户名,则将用户名添加到输出中,并在两列中使用NA
必须更改您的用户列表csv:
usernames
Hari
Rajesh
预期产出:
UserName column1 column2
-------- ------- -------
Hari abc 123
Rajesh NA NA
阅读关于的帮助。阅读关于的帮助。嗨,Dane,谢谢你的脚本,它工作得很好。但是为什么if和elseif在我发布的脚本中不起作用呢?它要么返回多次名称,要么返回长度。再次感谢您的时间。您的方法要求您检查每个用户名,并在每次检查是否存在匹配项时执行某些操作。我为列表中的每个用户发布的一个,它通过数据csv执行一个完整的循环。然后只进行一次检查,检查是否在循环中找到了用户,并进行相应的处理。它只是更有效,丹麦,谢谢你的脚本,它工作得很完美。但是为什么if和elseif在我发布的脚本中不起作用呢?它要么返回多次名称,要么返回长度。再次感谢您的时间。您的方法要求您检查每个用户名,并在每次检查是否存在匹配项时执行某些操作。我为列表中的每个用户发布的一个,它通过数据csv执行一个完整的循环。然后只进行一次检查,检查是否在循环中找到了用户,并进行相应的处理。只是效率更高