Как получить максимальное значение с помощью PowerShell? - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть CSV-файл со следующими значениями. Используйте import-csv для расчета максимальной версии для каждого do c.

DocName      Version
-----------------
DocA.docx     4.0
DocA.docx     3.9
DocA.docx     3.8
DocB.docx     2.0
DocB.docx     1.0
DocC.docx     0.2
DocC.docx     0.1

Как получить максимальную версию для каждого DocName? Например, для DocA.docx самая высокая версия - 4.0, а для docB.docx - самая высокая версия 2.0.

Мне нужно выдать вывод с использованием powershell?

Ответы [ 3 ]

0 голосов
/ 06 февраля 2020

Группировать таблицу, сортировать версии и выбирать наибольшее число

$TableGrouped = $Table | Group-Object {$_.DocName}

ForEach ($item in $TableGrouped) {
    $item.Group | Sort-Object -Descending -Property Version | Select-Object -First 1 
}
0 голосов
/ 06 февраля 2020

Я рекомендую рассматривать (сравнивать) версии как типы [version], а не как тип по умолчанию Import-Csv [string] или тип [decimal], как предложено @Dave.
. в одном go вы можете использовать [version[]] массив в вычисляемом свойстве:

Import-Csv .\MyFile.csv | Group-Object DocName |
    Select Name, @{
        Name = 'Version'
        Expression = {([version[]]$_.Group.Version | Measure-Object -Maximum).Maximum}
    }
0 голосов
/ 06 февраля 2020

Когда вы импортируете CSV, вам нужно будет преобразовать версию в десятичную, тогда вы можете использовать Group-Object и Measure-Object, чтобы получить самую высокую версию по файлу. Как то так:

$file = Import-Csv -Delimiter ',' | % {$_.Version = [decimal]$_.Version} 
$file | Group-Object DocName | Select Name, @{Name = 'Version'; Expression = {($_.Group.Version | Measure-Object -Maximum).Maximum}}
...