2014-09-02 145 views
-1

我有两个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 
     } 
    } 
} 

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

+0

-1疑问,不显示任何努力。请阅读[help](http://stackoverflow.com/help/how-to-ask)了解如何提出一个智能问题的一些提示。 – vonPryz 2014-09-02 06:10:31

+0

阅读关于[if语句]的帮助(http://technet.microsoft.com/zh-cn/library/hh847876.aspx)。 – vonPryz 2014-09-02 10:14:15

回答

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的输出中。

不得不改变你的用户列表CSV:

usernames 
Hari 
Rajesh 

预期输出:

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

嗨丹尼恩,谢谢你的剧本,它完美的作品。但是,为什么if和elseif在我发布的脚本中不起作用。它要么多次返回名称,要么返回长度。再次感谢您的时间。 – user2670623 2014-09-03 05:12:54

+0

您的方法需要您检查每个用户名,并在每次匹配或不匹配时执行一些操作。我为列表中的每个用户发布的一个用户通过数据csv完成一个完整的循环。那么只有一个检查是用户在循环中找到或没有,并相应地进行处理。它更高效 – 2014-09-03 15:08:45

+0

感谢Dane。我已经接受了解决方案。 – user2670623 2014-09-04 04:57:16

相关问题