#排序与分组
Sort-Object 用于按一个或多个属性对对象排序,Group-Object 用于按属性值将对象分组。两者经常配合使用,以便统计和查看数据的分布。
#Sort-Object 排序
#基本排序
默认按属性值升序排序,使用 -Descending 改为降序:
> Get-Process | Sort-Object -Property CPU
> Get-Process | Sort-Object -Property CPU -Descending
#按多个属性排序
属性名之间用逗号分隔,排序时依次比较:
> Get-ChildItem -File | Sort-Object -Property Extension, Length
-Descending 会作用于指定的排序属性:
> Get-ChildItem -File | Sort-Object -Property Extension, Length -Descending
如果需要不同属性使用不同的排序方向,可以使用哈希表形式的属性:
> Get-ChildItem -File | Sort-Object -Property @{ Expression = 'Extension'; Descending = $true }, Length
#去除重复项
-Unique 在排序后去除重复项:
> Get-ChildItem -File | Sort-Object -Property Extension -Unique
#Group-Object 分组
#基本分组
按属性值分组:
> Get-ChildItem -File | Group-Object -Property Extension
结果对象通常包含以下属性:
| 属性 | 说明 |
|---|---|
Name | 分组的键值,例如扩展名 |
Count | 该组中的对象数量 |
Group | 该组包含的原始对象集合 |
#只统计数量
使用 -NoElement 不保留 Group 属性,只返回分组名称和数量:
> Get-ChildItem -File | Group-Object -Property Extension -NoElement
#访问分组内容
> $groups = Get-ChildItem -File | Group-Object -Property Extension
> $groups | Sort-Object -Property Count -Descending | Select-Object -Property Name, Count
> $groups[0].Group
#组合示例
按进程名分组,再按数量降序查看前 5 项:
> Get-Process | Group-Object -Property ProcessName | Sort-Object -Property Count -Descending | Select-Object -First 5 -Property Name, Count
#注意事项
Sort-Object默认升序,-Descending表示降序。- 多个排序属性按书写顺序依次比较。
-Unique基于排序使用的属性去重,适合提取不重复的值。