我尝试对CSV中的列列表进行排序。它的格式不正确,因为对象类型是system.array。
通过执行类型转换,我可以分别获取单个列的值。有没有一种方法可以对所有列进行类型转换。以下代码仅适用于单个列。
timestamp | abc | A | B | C | D | E | F | G |
|
6/4/20196775 | 3059 | 4 | 2292 | 1328 | 764 | 0 | 0 |
|
6/4/20196910 | 3167 | 28 | 3568 | 1180 | 1348 | 0 | 0 |
|
6/4/20196749 | 3161 | 0 | 2180 | 2060 | 1440 | 0 | 28 |
|
6/5/20196738 | 3118 | 4 | 2736 | 1396 | 984 | 0 | 0 |
|
6/5/20196718 | 3130 | 12 | 3076 | 1008 | 452 | 0 | 4 |
|
6/5/20196894 | 3046 | 4 | 2284 | 1556 | 624 | 0 | 0 |
这是示例csv数据。
$csv=Import-Csv 'M:\MyDoc\script\logfiles\streams_OUTPUT.csv'
$uniquedates=$csv |select timestamp -Unique
$resultTab = @();
foreach ($d in $uniquedates)
$array_name = $csv |where {$_.timestamp -like $d.timestamp } | Sort- Object @{expression={if($_.A){[int[]]$_.A}}} -Descending | Select -First 1
$resultTab += $array_name;
}
$resultTab | FT
我想要的输出,我正在寻找的是:
timestamp streams A B C D E F G
6/4/2019 6910 3167 28 3568 2060 1440 0 28
6/5/2019 6894 3130 12 3076 1556 984 0 4
答案 0 :(得分:0)
[编辑-将示例数据更改为新版本,并更改了代码以适用于新规范。]
这是完成这项工作的一种方法。 [ grin ]使用PoSh允许一口气从集合中获取单个属性的所有值的方式。 $Collection.PropName
将为您提供所有可用的价值。
# fake reading in a CSV
# in real life, use Import-CSV
$InStuff = @'
timestamp, abc, A, B, C, D, E, F, G
6/4/2019, 6775, 3059, 4, 2292, 1328, 764, 0, 0
6/4/2019, 6910, 3167, 28, 3568, 1180, 1348, 0, 0
6/4/2019, 6749, 3161, 0, 2180, 2060, 1440, 0, 28
6/5/2019, 6738, 3118, 4, 2736, 1396, 984, 0, 0
6/5/2019, 6718, 3130, 12, 3076, 1008, 452, 0, 4
6/5/2019, 6894, 3046, 4, 2284, 1556, 624, 0, 0
'@ | ConvertFrom-Csv
$TargetPropertyList = $InStuff[0].PSObject.Properties.Name.Where({$_ -ne 'TimeStamp'})
$GroupedInStuff = $InStuff |
Group-Object -Property TimeStamp
$Results = foreach ($GIS_Item in $GroupedInStuff)
{
$HighestValues = [ordered]@{
TimeStamp = $GIS_Item.Name
}
foreach ($TPL_Item in $TargetPropertyList)
{
$TempHiVal = ($GIS_Item.Group.$TPL_Item.ForEach({[int]$_}) | Sort-Object)[-1]
$HighestValues.Add($TPL_Item, $TempHiVal)
}
[PSCustomObject]$HighestValues
}
$Results = $Results |
Sort-Object -Property {[datetime]$_.TimeStamp}
$Results |
Format-Table
输出...
TimeStamp abc A B C D E F G
--------- --- - - - - - - -
6/4/2019 6910 3167 28 3568 2060 1440 0 28
6/5/2019 6894 3130 12 3076 1556 984 0 4
请记住,除了最终显示或输出到纯文本文件之外,请勿将Format-Table
[或其他Format-*
cmdlet]用于其他任何用途。他们将您的对象切碎,以格式代码包装,然后将其吐出。如果您尝试将输出用于任何其他工作,它将产生垃圾。