powershell - PowerShell:在哈希表值集合中排序
问题描述
我有一个测试输入csv文件,如下:
ID;Product;Price;Discount;Level
1;Alpha;23.00;0.03;A
2;Bravo;17.00;0.01;A
3;Charlie;11.00;0.05;A
4;Delta;17.00;0.05;A
5;Echo;29.00;0.07;A
6;Foxtrot;11.00;0.01;A
7;Golf;11.00;0.01;A
1;Hotel;53.00;0.11;B
2;India;53.00;0.13;B
3;Juliet;61.00;0.11;B
1;Kilo;79.00;0.23;C
2;Lima;89.00;0.23;C
3;Mike;97.00;0.29;C
4;November;83.00;0.17;C
5;Oscar;79.00;0.11;C
我想生成以下输出文件:
ID;Product;Price;Discount;Level
1;Alpha;23.00;0.03;A
5;Echo;29.00;0.07;A
2;India;53.00;0.13;B
3;Juliet;61.00;0.11;B
2;Lima;89.00;0.23;C
3;Mike;97.00;0.29;C
也就是说,对于每个级别,我想选择按价格排序的前两行,然后是折扣。例如,对于 level B
,我想要Juliet
而India
不是Juliet
and Hotel
。
我有以下代码片段并不能完全交付!
$input = '.\TestInput.csv'
$products = @(Import-CSV -Path $input -Delimiter ";")
$levels = $products |
Group-Object -Property Level -AsHashTable
$sales = $levels.GetEnumerator() |
Sort-Object -Property @{ Expression = { [int]($_.Price) } ; Descending = $true },
@{ Expression = { [int]($_.Discount) } ; Descending = $true } |
Select-Object -first 2
$output = '.\TestOutput.csv'
$sales | Export-Csv -Path $output -Delimiter ";" -NoTypeInformation
我错过了什么?
解决方案
$sales = ForEach ($Level in $levels.Keys | Sort-Object) { $levels.$Level | Sort-Object -Property price,discount | Select-Object -last 2 }
推荐阅读
- c# - 项目命令不能编辑列表中的另一个项目
- c# - 导出到 Excel 仅在 Web 应用程序中在 SaveAs 处引发错误
- python - 在 python 中的三元语句中引发错误,而不使用经典的 if/else 语法
- azure - 我可以使用 ADConnect 将用户迁移到 Azure B2C
- laravel - 流明:[ErrorException] chdir():没有这样的文件或目录(errno 2)
- android - Playstore 安装应用程序崩溃,但直接 android studio 安装运行良好
- r - 如何使用函数 sim.msm 重复函数并将值存储在 R 中
- c# - ASP.NET Core 2:在这种情况下,“多对一”关系背后的代码是什么?
- angular - 使用 ng2-pdf-viewer 或更优化的方式从 PDF 中读取文本?
- angular - 自定义组件值未使用 Angular Reactive Form 更新