我有一个csv文件,其中包含下一个数据:
Pages,Pages BN,Pages Color,客户
145,117,28,Report_Alexis
46,31,15,Report_Alexis
75,27,48,Report_Alexis
145,117,28,Report_Jack
46,31,15,Report_Jack
75,27,48,Report_Jack
145,117,28 ,Report_Amy
46,31,15,Report_Amy
75,27,48,Report_Amy
所以我需要做的是根据报告名称汇总每一列,并导出到这样的另一个csv文件
页面,页面BN,页面颜色,客户
266,175,91,Report_Alexis
266,175,91,Report_Jack
266,175,91,Report_Amy
我怎样才能做到这一点?
我尝试了这个:
$coutnpages = Import-Csv "C:\temp\testcount\final file2.csv" |where {$_.Filename -eq 'Report_Jack'} | Measure-Object -Property Pages -Sum
然后
$Countpages.Sum | Set-Content -Path "C:\temp\testcount\final file3.csv"
但这只是一个,然后我不知道该怎么做。
你能帮我么?
工作代码
$IdentityColumns = @('Customer')
$ColumnsToSum = @('Pages', 'Pages BN', 'Pages Color')
$CSVFileInput = 'S:\SCRIPTS\1.csv'
Import-Csv -Path $CSVFileInput |
Group-Object -Property $IdentityColumns |
ForEach-Object {
$resultHT = @{ Customer = $_.Name } # This is result HashTable (Key-Value collection). We add here sum's next line.
@($_.Group | Measure-Object -Property $ColumnsToSum -Sum ) | # Run calculating of sum for all $ColumnsToSum`s in one line
ForEach-Object { $resultHT[$_.Property] = $_.Sum } # For each calculated property we set property in result HashTable
return [PSCustomObject]$resultHT # Convert HashTable to PSCustomObject. This better.
} | # End of ForEach-Object by groups
Select @($ColumnsToSum + $IdentityColumns) | # This sets order of columns. It may be important.
Out-GridView # Or replace with Export-Csv
#Export-Csv ...
说明:
用于Group-Object
收集组。组具有4个属性:
Name
-群组名称,等于您要分组的属性的确定值(-ies)Values
-您要分组的属性值的集合(未字符串化)Count
-归入此组的元素数Group
-归入此组的元素的值要按单个字符串属性进行分组(在这种情况下可以),您可以轻松使用Name
group,否则请始终使用Values
。
所以后Group-Object
,你迭代不是收集-的-行CSV的,但在收集-的集合- -行的一些条件进行分组。
Measure-Object
可以为单遍处理多个属性(不混合来自不同属性的值),因此我们会积极使用。这将导致对象数组的属性Property
等于传递给Measure-Object
和值(Sum
在我们的示例中)。我们将这些Property=Sum
对移动到哈希表。
[PSCustomObject]
将哈希表转换为对象。对象总是更好地输出。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句