数据集需要重新排列并导出为CSV

时间:2019-01-14 19:28:50

标签: powershell csv

我有一组数据,需要重新设置标题。我认为,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得到结果,因为它会扫描数据并将值随机排列。

1 个答案:

答案 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