【发布时间】:2011-12-12 08:10:11
【问题描述】:
我正在尝试从一些(大)文本文件中提取一组数据。基本上,每一行看起来像这样:
2011-12-09 18:20:55, ABC.EXE[3b78], The rest of the line...
我想获取大括号之间的日期和位(进程 ID),然后编译一个表。任务的第二阶段是对该表进行分组,以便我获得每个进程 ID 的最早日期,实际上为我提供了每个进程 ID 的第一个日志条目的日期和时间,这有望接近该实例的开始时间过程。
到目前为止我所得到的(为了便于阅读,分成不同的行)
gci -filter *.log -r
| select-string '(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}), ABC.EXE\[(.{4})'
| % { $_.matches } | % { $_.groups } | % { $_.value }
吐出捕获。我想忽略第一个捕获,并将第二个和第三个合并到同一行。
帮助? 请问?
编辑: DOH!无法回答我自己的问题。所以...
好的,我想我是在正确的轨道上。一个 SO 问题here 帮助我获得了我想要的各个部分,即:
$_.matches[0].groups[1].value, $_.matches[0].groups[2].value
然后,一篇 MSDN 文章 here 展示了如何将位“聚集”到一个对象中,从而可以对其进行分组/排序/操作。最终结果
gci -filter *.log | select-string '(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}), ABC.EXE\[(.{4})'
| % { new-object object
| add-member NoteProperty Name $_.matches[0].groups[1].value -passthru
| add-member NoteProperty PId $_.matches[0].groups[2].value -passthru }
相当混乱,所以如果有人知道更清洁的方法,请告诉我。
【问题讨论】:
标签: regex powershell