我在orders.csv
中有一个列表,如此:
Order
1025405008
1054003899
1055003868
1079004365
我希望将单位编号(第2至第4个字符)和整个订单编号添加到数组中,因此它将如下:
"0254","1025405008"
"0540","1054003899"
etc
etc
我希望忽略前缀“1”。到目前为止,凭借我有限的PS知识,我创建了变量:
$Orders = Import-csv c:\Orderlist.csv
$Units = $Orders | Select @{LABEL="Unit";EXPRESSION={$_.Order.Substring(1,4)}}
所以我希望将两者合并为一个数组。我试过了
$array = $Units,Orders
任何帮助将不胜感激。
答案 0 :(得分:4)
如果一个大的CSV文件使用regexp只有这一列比Select
快得多:
$combined = [IO.File]::ReadAllText('c:\Orderlist.csv') `
-replace '(?m)^\d(\d{4})\d+', '"$1","$&"' `
-replace '^Order', 'Unit, Order' | ConvertFrom-Csv
在2MB文件中的100k记录上快了~6倍(700ms对4100ms)
答案 1 :(得分:3)
您只需在Select
语句中选择订单,然后使用ConvertTo-Csv
cmdlet获取所需的输出:
$Orders = Import-csv c:\Orderlist.csv
$unitOrderArray = $Orders | Select @{LABEL="Unit";EXPRESSION={$_.Order.Substring(1,4)}}, Order
$unitOrderArray | ConvertTo-Csv -NoTypeInformation
<强>输出:强>
"Unit","Order"
"0254","1025405008"
"0540","1054003899"
"0550","1055003868"
"0790","1079004365"