首页 > 解决方案 > 在数字首次出现后对 .CSV 的内容进行排序

问题描述

我想以一种非常不寻常的方式对我的服务器列表进行排序。到目前为止,我设法使用 Powershell 对我的 CSV 文件进行排序,如下所示:

import-csv path | sort-object Name | export-csv path -useculture -notypeinformation

->

Name,IP,...
Server100,stuff,...
Server200,stuff,...
Server300,stuff,...
vServer100,stuff,...
vServer200,stuff,...
vServer300,stuff,...

但我真的很想像这样对它们进行排序:

Name,IP,...
Server100,stuff,...
vServer100,stuff,...
Server200,stuff,...
vServer200,stuff,...
Server300,stuff,...
vServer300,stuff,...

阅读有关正则表达式的内容,但我对脚本很陌生,无法弄清楚。

标签: powershell

解决方案


您可以将脚本块或计算的属性定义作为-Property参数传递:

Import-Csv $path |Sort-Object { +$($_.Name -replace '\D') }, Name |...

正则表达式操作$_.Name -replace '\D'将获取Name属性的值(例如vServer100)并删除任何非数字。子表达式前面的 将结果字符串(例如
)转换为数字(例如)。+"100"100

对这个数字排序后,Sort-Object会按 排序Name,所以ServerXXX出现在前面vServerXXX


推荐阅读