我正在排序具有以下模式的文本文件:
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
子字符串作为每行中的日期,我需要按日期的升序或降序对行进行排序。
我收到错误,我无法对文本文件进行排序。
答案 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] }