2013-08-27 29 views
0

我想自動化一個CSV文件,其中包含大量的數據行。這裏是一個樣本:PowerShell聯合CSV列

========================== 
    = ID = Last Name =User ID= 
    = 22 = Smith = 0077 = 
    = 22 = Smith = 0078 = 
    = 22 = Smith = 0079 = 
    = 22 = Jones = 0081 = 

和名單繼續。

我想要做的是將列ID與列姓氏合併,並使用Powershell將其放入新的CSV文件中。我試過如下:

@ {N =」 ID」; E = {$ .ID +‘ - ’+ $。去年名稱}}

沒有太多的運氣這雖然。

任何幫助,將不勝感激。

+0

是你能夠解決你的問題? – Mitul

回答

0

您的列標題中有空格,這應該是您可以修復的第一件事。但除此之外,這是我的示例emp.csv文件,腳本,然後newemp.csv作爲解決方案。

id loginid firstname lastname 
1 abc123 John patel 
2 zxy321 Kohn smith 
3 sdf120 Maun scott 
4 tiy123 Dham rye 
5 k2340 Naam mason 
6 lk10j5 Shaan kelso 
7 303sk Doug smith 

腳本

$objs [email protected](); 
$output = Import-csv -Path C:\Scripts\so\emp.csv | ForEach { 
$Object = New-Object PSObject -Property @{    
     Computed = [String]::Concat($_.id,$_.lastname) 
     Firstname = $_.firstname    
    } 
    $objs += $Object; 
} 
$objs 
$objs | Export-CSv C:\Scripts\so\newemp.csv 

Computed Firstname 
1patel John 
2smith Kohn 
3scott Maun 
4rye Dham 
5mason Naam 
6kelso Shaan 
7smith Doug 
1

我會先開始做內容CSV compatiable:

Get-Content file.txt | 
Where-Object {$_ -match '^\s+=\s.+\s+=$'} | 
ForEach-Object { $_ -replace '^\s+=\s*|\s+=$' -replace '\s+=\s+',','} | 
ConvertFrom-Csv -Header ID,LastName,UserID 

ID LastName UserID 
-- -------- ------ 
22 Smith 0077 
22 Smith 0078 
22 Smith 0079 
22 Jones 0081 

然後用Select-Object來創建新列:

... 
ConvertFrom-Csv -Header ID,LastName,UserID | 
Select @{n=’ID’;e={$_.ID + '-' + $_.LastName}},UserID 

ID  UserID 
--  ------ 
22-Smith 0077 
22-Smith 0078 
22-Smith 0079 
22-Jones 0081