2014-01-27 110 views
0

這似乎很基本,但我找不到或找不到任何地方。Powershell搜索CSV對Hashtable

我有2個CVS文件,我想導入一個並將ID列更改爲另一個.csv中包含的相關字符串,然後將結果導出到文件。我一直在嘗試哈希表,但似乎無法弄清楚。

電流:

Main.csv          Reference.csv  
Type_ID Category_ID  Location_ID  Type_ID  Type 
1   11    111    1   Tablet 
2   22    222    2   Laptop 
3   33    333    3   Workstation 

想它改爲:

Type  Category_ID  Location_ID   
Tablet  11    111     
Laptop  22    222    
Workstation 33    333 

這裏是我的工作代碼:

#import file as hash table 
$t = Import-Csv -Path .\Reference.csv -Header "column1","column2" 
$HashTable = @{} 
foreach($r in $t) 
{ 
    Write-Host $r.column1 $r.column2 
    $HashTable[$r.column1] = $r.column2 
} 
$HashTable 

#compare ID and assign string 
ForEach($_.Type_ID in (Import-CSV .\Main.csv)){ 
    If($HashTable.ContainsKey($_.column1)){ 
     $_.column1=$HashTable[$_.column2] 
     } 
    $_ 
    } | Export-Csv .\it_works.csv 

任何建議是極大的讚賞

回答

0

首先你可以創造Ë一個Hashtable:

Import-Csv C:\dumy\b.csv | % {[email protected]{}}{[email protected]{$_.type_id=$_.type}} 

然後:

Import-Csv C:\dumy\a.csv | select @{name = "Type"; expression={$t[$_.type_id]}},Category_ID,Location_ID | export-csv 'c:\dumy\c.csv' 
+0

的Merci先生@JPBlanc, 它的工作原理就像我問,我可能會問我怎麼會類型之前插入一列?我的文件有很多列(爲簡單起見,我選擇了3列),使用逗號在右側添加更多內容時沒有問題,但在Type之前插入列時似乎出現錯誤。例如: 'Import-Csv C:\ dumy \ a.csv | Category_ID,選擇@ {name =「Type」;表達式= {$ t [$ _。type_id]}},Location_ID | export-csv'c:\ dumy \ c.csv'' –

+0

我正在使用@移動選擇。已解決 http://technet.microsoft.com/en-us/library/ff730948.aspx –