在PowerShell中,如何循环遍历CSV文件并基于csv中的键值创建摘要哈希表

quhf5bfb  于 2022-12-06  发布在  Shell
关注(0)|答案(3)|浏览(259)

首先,感谢您的帮助,其次,我是PowerShell的新手,所以我在玩它,可能走上了错误的道路;)
我有一个CSV文件,我正在阅读它的内容,它是好的,当我读取CSV时,我得到了一个数组。CSV文件包含类似于以下信息的内容:
| 名称名称名称|数值1|数值2|
| - -|- -|- -|
| 信息技术|四百四十四|三十二|
| 人力资源|三十四|二十一个|
| 信息技术|三十一个|五个|
| 信息技术|七十五|三个|
| 人力资源|六十四|2个|
我试图实现的是添加基于分组名称的值-所以我将结束:IT:550,40和HR:98,23
我已经尝试过使用数组列表、hastables和ForEach-Object,但恐怕我还没有走得很远。在将数组转换为数组列表之后,我一直在使用Get-Unique,但我仍然坚持最好的方法,首先基于name属性进行查找和更新,然后确定是否应该使用哈希表数组来保存多个数据项。
我会很感激任何指点,再次感谢。
J型

uurv41yg

uurv41yg1#

使用Group-Object,正如评论者所建议的,是一个很好的方法。使用Measure-Object来计算给定属性的总和。

# Create sample data
$data = @'
Name,Value1,Value2
IT,444,32
HR,34,21
IT,31,5
IT,75,3
HR,64,2
'@ | ConvertFrom-Csv

# Group sample data by value of Name property
$data | Group-Object Name | ForEach-Object {

    # Create an output object for the current group
    [pscustomobject]@{
        Name   = $_.Name
        Value1 = ($_.Group | Measure-Object -Property Value1 -Sum).Sum
        Value2 = ($_.Group | Measure-Object -Property Value2 -Sum).Sum
    }
}

不过,当你开始使用一个实际的CSV文件时,你不需要将整个CSV文件加载到一个变量中,这样会浪费内存。

Import-Csv data.csv | Group-Object Name | ForEach-Object { ... }

输出:

Name Value1 Value2
---- ------ ------
IT      550     40
HR       98     23
hjzp0vay

hjzp0vay2#

我修改了昨天写的剧本

$input = @"
Name, Value1, Value2
IT,444,32
HR,34,21
IT,31,21
IT, 31,5
HR,64,2
"@

$table = $input | ConvertFrom-Csv
$table | Format-Table

$groups = $table | Group-Object {$_.Name}

$outputTable = [System.Collections.ArrayList]::new()
foreach($group in $groups)
{
$group | Format-Table
   $newRow = New-Object -TypeName psobject
   $newRow | Add-Member -NotePropertyName Name -NotePropertyValue $group.Name

   $sum = 0
   $group.Group | foreach{$sum += $_.Value1}
   $newRow | Add-Member -NotePropertyName Value1 -NotePropertyValue $sum

   $sum = 0
   $group.Group | foreach{$sum += $_.Value2}
   $newRow | Add-Member -NotePropertyName Value2 -NotePropertyValue $sum

   $outputTable.Add($newRow)  | Out-Null
}
$outputTable | Format-Table
rslzwgfq

rslzwgfq3#

只是一个更新给你-我用了zett 42的后-工作起来像一个魅力-我把自定义对象管道到Export-Csv创建一个新的csv从信息。我感谢所有的帮助这一点,认为我需要学习更多的PowerShell ;)

相关问题