我有一组数据,需要重新设置标题。我认为,PowerShell是一种快速的方法。
以数据为例:
AAA, 123,53,145, text1 text12,text2,23.00, 21,6,0.21,0.00,2, 1,321,4 BBB,1,421,5, text3 text34, text4,41,22.5,1, 23,674,75,8,5....
如您所见,“,”将值分开,点只是值的一部分。 AAA和BBB代表名称,AAA的值在BBB之前。我希望CSV文件中的值像这样,每个值都在一个新单元格中
Name: AAA abc: 123 def: 53 ghi: 145 jkl: text1 text12 mno: text2 pqr: 23.00 stu: 21 vwx: 6 yz: 0
或者标题将是:名称abc def等,以及标题下一个单元格中的值。
一个名称(例如AAA)一共有16个值,以逗号分隔。可能有数百个具有随机值的名称。
我没有用Sort-Object
得到结果,因为它会扫描数据并将值随机排列。
答案 0 :(得分:0)
这是完成这项工作的一种方法。它假定有18个属性,并且每个对象都以不以逗号结尾的行结尾。
结果集可以通过Export-CSV
优雅地发送到CSV。 [咧嘴]
# fake reading in a text file as one multi-line string
# in real life, use Get-Content -Raw
# similar names & properties are NOT part of the data
# they are there for visually crosschecking the output
$InStuff = @'
Object_A,
A1,A2,A3,
A4 some other stuff,A5,
A6,A7 more extras,A8,A9,A10.00,
A11,A12,A13 thirteen,A14,
A15,A16.666,A17,A18
Object_B,B1.1,B2.2,B3.3,
B4 some other stuff,B5,B6,B7 more extras,B8,B9,B10.00,
B11,B12,B13 thirteen,B14,
B15,B16.666,B17,B18
'@
$ColumnHeaders = ('Name' +
' Col_01 Col_02 Col_03 Col_04 Col_05 Col_06 Col_07 Col_08 Col_09 Col_10' +
' Col_11 Col_12 Col_13 Col_14 Col_15 Col_16 Col_17 Col_18') -split ' '
$CSV = $InStuff -split "(?<!,)$([environment]::NewLine)" |
ForEach-Object {
$_ -replace ",$([environment]::NewLine)", ','
}
$Results = $CSV |
ConvertFrom-Csv -Header $ColumnHeaders
$Results
输出...
Name : Object_A
Col_01 : A1
Col_02 : A2
Col_03 : A3
Col_04 : A4 some other stuff
Col_05 : A5
Col_06 : A6
Col_07 : A7 more extras
Col_08 : A8
Col_09 : A9
Col_10 : A10.00
Col_11 : A11
Col_12 : A12
Col_13 : A13 thirteen
Col_14 : A14
Col_15 : A15
Col_16 : A16.666
Col_17 : A17
Col_18 : A18
Name : Object_B
Col_01 : B1.1
Col_02 : B2.2
Col_03 : B3.3
Col_04 : B4 some other stuff
Col_05 : B5
Col_06 : B6
Col_07 : B7 more extras
Col_08 : B8
Col_09 : B9
Col_10 : B10.00
Col_11 : B11
Col_12 : B12
Col_13 : B13 thirteen
Col_14 : B14
Col_15 : B15
Col_16 : B16.666
Col_17 : B17
Col_18 : B18