PowerShell脚本实现按hour分组统计count最大值
解决PowerShell按hour分组取count最大值的问题
我明白你遇到的问题了——直接用Measure-Object只会算出整个数据集的全局最值,没法按hour分组统计。咱们得把Group-Object和Measure-Object结合起来用,才能得到每个hour对应的count最大值。
方法一:输出CSV格式结果(保留结构)
这个脚本会先分组,再统计每组最大值,最后输出和你预期一致的纯数据行:
Import-Csv d:\test\serviceyrs.csv | # 按hour列分组,把相同hour的行归为一组 Group-Object -Property hour | # 遍历每个分组 ForEach-Object { # 计算当前分组里count列的最大值 $maxCount = ($_.Group | Measure-Object -Property count -Maximum).Maximum # 构建包含hour和对应最大count的自定义对象 [PSCustomObject]@{ hour = $_.Name count = $maxCount } } | # 转成CSV格式,去掉默认的类型信息行 ConvertTo-Csv -NoTypeInformation | # 跳过CSV表头,只输出数据行 Select-Object -Skip 1
方法二:直接输出字符串格式(和你示例完全匹配)
如果不需要CSV结构,只想直接得到00,34;01,45;02,50这种格式的输出,可以用更简洁的写法:
Import-Csv d:\test\serviceyrs.csv | Group-Object hour | ForEach-Object { $maxCount = ($_.Group | Measure-Object count -Maximum).Maximum # 直接拼接成你要的字符串格式 "$($_.Name),$maxCount" }
执行后会逐行输出每个hour的最大count,要是想把结果用分号连起来,可以在最后加个-join ';':
(Import-Csv d:\test\serviceyrs.csv | Group-Object hour | ForEach-Object { $maxCount = ($_.Group | Measure-Object count -Maximum).Maximum "$($_.Name),$maxCount" }) -join ';'
这样就能直接得到00,34;01,45;02,50的结果啦。
为什么之前的命令不行?
你之前的Import-Csv d:\test\serviceyrs.csv | Measure-Object -Property count -Minimum -Maximum没有做分组操作,Measure-Object会直接对整个CSV的count列计算最值,所以只能得到全局的最大值,而不是每个hour分组后的结果。
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

