2014-09-02 3 views
-1

J'ai deux fichiers csv, je veux vérifier les utilisateurs en nom d'utilisateur.csv correspond à userdata.csv copier
à output.csv. Si elle ne correspond pas à retourner le nom seul dans le output.csvcomparer deux csv en utilisant powershell et retourner les valeurs correspondantes et non-correspondantes

Ex: données utilisateur contient 3 colonnes

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

username.csv contient les noms d'utilisateur

Hari 
Rajesh 

Output.csv doit contenir

Hari,abc,123 
Rajesh,NA,NA 

Comment y parvenir. Merci

Désolé pour cela.

$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 
     } 
    } 
} 

Ceci renvoie uniquement les valeurs correspondantes. J'ai également besoin d'ajouter les valeurs non correspondantes dans le fichier de sortie . Merci.

+0

-1 pour la question qui ne montre aucun effort. S'il vous plaît lire le [aide] (http://stackoverflow.com/help/how-to-ask) pour quelques conseils comment poser une question intelligente. – vonPryz

+0

En savoir plus sur [l'instruction if] (http://technet.microsoft.com/fr-fr/library/hh847876.aspx). – vonPryz

Répondre

3

quelque chose comme ceci fonctionnera:

$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 

boucle sur chaque nom dans la liste des utilisateurs. La ligne 9 effectue une recherche du fichier CSV userdata pour un nom d'utilisateur correspondant s'il le trouve il ajoute les données utilisateur pour cet utilisateur à la sortie si aucune correspondance n'est trouvée, il ajoute le nom d'utilisateur à la sortie avec NA dans les deux colonnes.

devait changer votre userList csv:

usernames 
Hari 
Rajesh 

résultat attendu:

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

Salut Dane, Merci pour le script cela fonctionne parfaitement. Mais pourquoi le if et elseif ne fonctionne pas dans le script que j'ai posté.Il soit renvoie des noms dans plusieurs fois ou la longueur. Merci encore pour votre temps. – user2670623

+0

votre méthode vous demande de vérifier chaque nom d'utilisateur et de faire quelque chose chaque fois qu'il y a une correspondance ou non. Celui que j'ai posté pour chaque utilisateur dans la liste fait une boucle complète à travers les données csv. alors, une seule vérification était l'utilisateur trouvé dans la boucle ou non et traite en conséquence. C'est juste plus efficace –

+0

Merci Danois. J'ai déjà accepté la solution. – user2670623

Questions connexes