我正在尝试自动化包含大量数据行的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 :(得分: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