date - 如何使用 Powershell 根据最新日期从日志文件中提取最新行

标签 date powershell logfiles logfile

我是一个相对较新的 Powershell 用户,有一个我认为很简单的问题。我花了一些时间寻找类似的场景,但令人惊讶的是没有找到任何类似的场景。我会发布我失败的尝试,但我什至无法接近!

我有一个包含重复数据的日志文件,我想提取每个“唯一”条目的最新事件。问题在于每个条目由于各自的日期戳而都是唯一的。 “唯一”标准位于第 1 列。 示例:

AE0440,1,2,3,30/08/2012,12:00:01,XXX
AE0441,1,2,4,30/08/2012,12:02:01,XXX
AE0442,1,2,4,30/08/2012,12:03:01,XXX
AE0440,1,2,4,30/08/2012,12:04:01,YYY
AE0441,1,2,4,30/08/2012,12:06:01,XXX
AE0442,1,2,4,30/08/2012,12:08:01,XXX
AE0441,1,2,5,30/08/2012,12:10:01,ZZZ

因此我想要的输出是(顺序不相关):

AE0440,1,2,4,30/08/2012,12:04:01,YYY
AE0442,1,2,4,30/08/2012,12:08:01,XXX
AE0441,1,2,5,30/08/2012,12:10:01,ZZZ

如何获取此数据/丢弃旧数据?

最佳答案

试试这个,对于第一次使用的用户来说可能看起来有点神秘。它读取文件的内容,按唯一值对行进行分组(现在我们有 3 组),每组通过解析日期时间值(再次通过拆分)进行排序,并返回第一个值。

Get-Content .\log.txt | Group-Object { $_.Split(',')[0] } | ForEach-Object {    
    $_.Group | Sort-Object -Descending { [DateTime]::ParseExact(($_.Split(',')[-3,-2] -join ' '),'dd/MM/yyyy HH:mm:ss',$null) } | Select-Object -First 1    
}

AE0440,1,2,4,30/08/2012,12:04:01,YYY
AE0441,1,2,5,30/08/2012,12:10:01,ZZZ
AE0442,1,2,4,30/08/2012,12:08:01,XXX

关于date - 如何使用 Powershell 根据最新日期从日志文件中提取最新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12199185/

相关文章:

Powershell 向串口写入值

tomcat - netbeans tomcat清除日志文件

PHP 从表单中插入日期时间

ruby-on-rails - 将默认年份和月份设置为 nil,并选择日期而不是 1

powershell - 将 "Yes"或 "No"转换为 boolean 值

linux - 仅在 shell 脚本中一小时后提取数据

bash - 我如何使用 bash (grep/sed/etc) 在两个时间戳之间获取日志文件的一部分?

javascript - moment.js 解析语言和时区的日期

javascript - 日期范围是否包含两个特定日期

azure - 为什么我在连接到服务后收到 Connect-AzureAD 错误?