我有一个调试日志,它会根据预设的错误消息吐出某些数字。 例如
08:29:25.178 [DEBUG]错误查找ID 2834
08:29:25.179 [DEBUG]错误查找ID 2834
我想要这样做的主要原因是能够输出此ID的唯一实例(在上面的例子中只有一个2834)。否则这是不可能的,因为行中的时间戳使其唯一。因此,我只需要在结尾处输出id(在本例中为2834)。
我目前有以下脚本可以使用,但我想知道是否没有更有效/更优雅的方法来完成所有这些。
$tempfile='tempfile.txt'
$tempfile2='tempfile2.txt'
$tempfile3='tempfile3.txt'
$finalfile='missingIDs.txt'
get-content 20180131.log -ReadCount 1000 |
foreach { $_ -match " Error lookup ID" } > $tempfile
get-content $tempfile | % { $_.Split(' ')[-1] } >$tempfile2
gc $tempfile2 | sort | get-unique > $tempfile3
gc $tempfile3| get-unique > $finalfile
答案 0 :(得分:0)
删除中间文本文件,改为使用管道。
() | ()
qp | []
|| | /\
--------------------------------------------------
这使得整个过程更加高效,因为没有磁盘写入/读取。
答案 1 :(得分:0)
为了清晰起见重述问题:
根据输入行,找到"错误查找ID"后跟一串数字ID
。返回输入中找到的所有唯一ID
。
$testInput = @(
"08:29:25.177 [INFO] system started 5342"
"08:29:25.177 [DEBUG] Error lookup ID 2834"
"08:29:25.178 [TRACE] entered something"
"08:29:25.179 [DEBUG] Error lookup ID 2834"
"08:29:25.179 [DEBUG] Error lookup ID 2836"
)
$testInput | % { if ($_ -match ".*Error lookup ID (\d+)"){$Matches.1} } | Select-Object -Unique