powershell将CSV中的列组合在一起

时间:2013-08-27 00:24:23

标签: powershell csv concatenation

我正在尝试自动化包含大量数据行的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 +“ - ”+ $ 。姓名}}

虽然没有太多运气。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

我首先要开始使内容csv兼容:

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

答案 1 :(得分: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 =@();
$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