比较两个csv使用powershell并返回匹配和不匹配的值
我有两个csv文件,我想检查username.csv中的用户与userdata.csv匹配,将
复制到output.csv。如果它不匹配在output.csv比较两个csv使用powershell并返回匹配和不匹配的值
对于防爆独自返回名称:用户数据包含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行会搜索用户数据CSV,如果找不到匹配,则会将该用户的用户数据添加到输出中,从而将用户名添加到包含NA的输出中。
不得不改变你的用户列表CSV:
usernames
Hari
Rajesh
预期输出:
UserName column1 column2
-------- ------- -------
Hari abc 123
Rajesh NA NA
嗨丹尼恩,谢谢你的剧本,它完美的作品。但是,为什么if和elseif在我发布的脚本中不起作用。它要么多次返回名称,要么返回长度。再次感谢您的时间。 – user2670623 2014-09-03 05:12:54
您的方法需要您检查每个用户名,并在每次匹配或不匹配时执行一些操作。我为列表中的每个用户发布的一个用户通过数据csv完成一个完整的循环。那么只有一个检查是用户在循环中找到或没有,并相应地进行处理。它更高效 – 2014-09-03 15:08:45
感谢Dane。我已经接受了解决方案。 – user2670623 2014-09-04 04:57:16
-1疑问,不显示任何努力。请阅读[help](http://stackoverflow.com/help/how-to-ask)了解如何提出一个智能问题的一些提示。 – vonPryz 2014-09-02 06:10:31
阅读关于[if语句]的帮助(http://technet.microsoft.com/zh-cn/library/hh847876.aspx)。 – vonPryz 2014-09-02 10:14:15