Во-первых, вам нужно разбить строку на разделитель |
и захватить последнее значение из каждой строки:
# 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] }
Это дает много ошибок, может быть, я не использую его правильно, читая файл или анализируя текст. – maverick
@maverick Обновите свой вопрос и добавьте ошибки, которые вы получите. Если файл отформатирован точно так, как вы описываете, оба метода должны работать –