将csv列拆分为两列(powershell)

时间:2015-12-23 19:25:41

标签: csv powershell

我有一个带有地址行的csv,其中一些有适当的数字,有些没有。我一直在使用PowerShell尝试将列分成两部分。一个是地址,一个是公寓。 所以初始列看起来像这样。

839 Main St Apt 3
130 Marcy Ave
399 Broadway Ave Apt 6F

结果我正在寻找

地址栏

839 Main St                 
130 Marcy Ave
399 Broadway Ave            

公寓专栏

Apt 3 空格处 Apt 6F

我试图看看我怎么能分开这个。如果我使用空格作为分隔符,那么它会将adderess列拆分为多个列。如果我使用字母A,那么可能会留下pt 6F。解决这个问题的正确方法是什么。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您可以使用:

$aptReg=[regex]'^(.*)(Apt.*)$'
"839 Main St Apt 3","130 Marcy Ave","399 Broadway Ave Apt 6F" | % {if($aptReg.IsMatch($_)){$a=$aptReg.Matches($_);[PSCustomObject]@{"A1"=$a.Groups[1].Value;"A2"=$a.Groups[2].Value}}else{[PSCustomObject]@{"A1"=$_;"A2"=""}}} 

它给出了:

A1                     A2                                                                                                                              
--                     --                                                                                                                              
839 Main St            Apt 3                                                                                                                           
130 Marcy Ave                                                                                                                                                                                                                                                    
399 Broadway Ave       Apt 6F  

给出以下CSV文件:

"Name","Surname","Address","Zipcode"
"N1","S1","839 Main St Apt 3","Z1"
"N2","S2","130 Marcy Ave","Z2"
"N2","S2","399 Broadway Ave Apt 6F","Z2"

很长的一个班轮......

Import-Csv C:\ Temp \ test.csv | %{if($ aptReg.IsMatch($ .Address)){$ a = $ aptReg.Matches($ .address); $ a1 = $ a.Groups [1] .Value; $ a2 = $ a.Groups [2] .Value} else {$ a1 = $ .address; $ a2 =""}; Add-Member -InputObject $ -MemberType NoteProperty - 姓名" A1" -Value $ a1; Add-Member -InputObject $ _ -MemberType NoteProperty -Name" A2" -Value $ a2; $ _} | Export-Csv" C:\ Temp \ test Bis.csv"