在文本文件中排序日期

时间:2016-07-15 18:38:31

标签: sorting powershell

我正在排序具有以下模式的文本文件:

moon|gamma|D5412|745|72|8:3:43:7:6:2016
Bingo|denmark|4|4|985|12:11:43:7:12:2015
charlie|london|Debb|517|10|7:15:43:6:5:2014
Alpha|Debra|devido|0|8745|6:33:43:23:6:2016

考虑将7:3:43:7:6:2016子字符串作为每行中的日期,我需要按日期的升序或降序对行进行排序。 我收到错误,我无法对文本文件进行排序。

1 个答案:

答案 0 :(得分:3)

首先,您需要使用分隔符|拆分字符串,并从每行中获取最后一个值:

# Index -1 is always the last one
$dateString = 'moon|gamma|D5412|745|72|8:3:43:7:6:2016'.Split('|')[-1]

然后,您可以使用DateTime.ParseExact()静态方法将输入字符串解析为可排序的DateTime对象:

[datetime]::ParseExact($dateString,'H:m:s:d:M:yyyy',[cultureinfo]::InvariantCulture)

现在我们只需将它们作为一个参数放在Sort-Object -Property

Get-Content .\file.txt |Sort-Object -Property { [datetime]::ParseExact($_.Split('|')[-1],'H:m:s:d:M:yyyy',[cultureinfo]::InvariantCulture)}

Sort-Object的默认排序顺序为升序,如果需要,请使用-Descending开关进行更改。

如果你想使用更简洁和unix'y方法,请改为对日期字符串的各个值进行排序(你需要对它们进行重新排序):

Sort-Object { $_.Split('|')[-1].Split(':')[5,4,3,0,1,2] }