0

我正在尝试自动化包含大量数据行的 CSV 文件。这是一个示例:

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

而这样的例子不胜枚举。

我想要做的是将ID列与Last Name列合并,并使用 PowerShell 将其放入新的 CSV 文件中。我尝试了以下方法:

@{n=’ID’;e={$_.ID + ”-” + $_.Last Name}}

但没有太多运气。

4

2 回答 2

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
于 2013-08-27T08:13:14.027 回答
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
于 2013-08-27T02:09:30.613 回答