Как группировать и суммировать строки CSV по значению общего столбца? - PullRequest
0 голосов
/ 07 мая 2018

Я новичок в PowerShell, и в настоящее время я застрял с проблемой.

Я импортирую файл CSV с 2 столбцами (имя_сервера и размер) как это:

Server | Size
-------------
SRV1   | 140

SRV2   | 120

SRV1   | 100

SRV1   | 140

SRV2   | 200

Я хочу добавить все значения размера для каждого сервера, например:

SRV2 = 120+200
SRV1 = 140+100+140

Понятия не имею, как это сделать. Я пытался использовать цикл for, но операция выполняется для каждой строки, поэтому мои результаты неверны. Кто-нибудь может мне помочь?

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Использование:

  • командлет Group-Object для группировки строк CSV по имени сервера (Server)
  • затем используйте Select-Object для создания одного выходного объекта для группы ,
  • содержит имя сервера и сумму значений Size всех связанных строк, полученных с помощью вычисляемого свойства , использующего командлет Measure-Object :
Import-Csv file.csv | Group-Object Server | 
  Select-Object Name, @{ n='Size'; e={ ($_.Group | Measure-Object Size -Sum).Sum } }

Если вы хотите, чтобы первый выходной столбец имел имя Server, замените Name на @{ n='Server'; e='Name' }

С вашими образцами данных, приведенное выше дает:

Name Size
---- ----
SRV1  380
SRV2  320
0 голосов
/ 07 мая 2018

Вот пример, как вы могли бы это сделать:

$Data = Import-Csv -Path "yourfilepath" -Delimiter ";"

$SortedData = $Data | Group {$_.server}
$Hashtable = @{}
$SortedData.group | ForEach-Object {
    if ($Hashtable.Contains($_.server)) {
        $Hashtable[$_.server] += ",$($_.size)"
    } else {
        $Hashtable.Add($_.server,$_.size)
    }
}

Вам нужно изменить разделитель в вашем случае

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...