如何用Powershell按服务器名称中首次出现的数字排序CSV内容
解决方案
直接使用以下PowerShell代码即可实现你需要的排序效果:
Import-Csv -Path "输入CSV的完整路径" | Sort-Object -Property @( # 第一优先级:按名称内的数字编号升序排序 { [int]([regex]::Match($_.Name, '\d+').Value) }, # 第二优先级:同编号下不带v前缀的服务器排在前面 { $_.Name.StartsWith('v') } ) | Export-Csv -Path "输出CSV的完整路径" -UseCulture -NoTypeInformation
实现逻辑说明
- Sort-Object支持传入多组排序规则,会按顺序优先执行靠前的规则
- 第一组规则用正则
\d+匹配服务器名称里的连续数字,转为整数后排序,保证相同编号的服务器会被分到同一组 - 第二组规则判断服务器名称是否以
v开头,PowerShell排序时布尔值$false的优先级高于$true,因此不带v前缀的普通服务器会排在同编号v前缀服务器的前面
如果你的服务器命名规则后续有调整,比如数字前有其他特殊字符,只需要修改正则匹配规则适配即可。
内容的提问来源于stack exchange,提问作者ziotron
相关产品推荐
相关产品推荐

