根据特定日期从日志文件中提取文本,并在Powershell中导出为CSV

mum43rcc  于 2022-11-25  发布在  Shell
关注(0)|答案(2)|浏览(136)

我有一个文件包含几个月的日志,我想只存储特定数据的日志到csv文件。
示例日志数据:
2022-06-21 09:06:09 15 SS 1B设备= Z39文本-0003254设备已在线添加
2022-07-21 09:06:09 15 SS 2B设备= Z40文本-0003254设备已在线添加
2022-08-21 09:06:09 15 SS 3B设备= Z41文本-0003254设备已在线添加
2022-09-21 09:06:09 15 SS 4 B设备= Z42文本-0003254设备已在线添加
我得到的结果有以下几列:忽略大小写、行号、行、文件名、路径、模式、上下文、匹配。我只对行列的结果感兴趣。
感谢你的帮助。谢谢。
这是我的代码:

$data = Get-Content '\log.log' | Select-String -Pattern "2022-08-21" | Export-CSV -Path '\output.csv' -NoTypeInformation

我请求是获取内容并将它们导出到新表中,如下所示:
Date Time Number Type
2022-06-21 09:06:09 15SS1B Equip

dwthyt8l

dwthyt8l1#

我将使用正则表达式解析出需要的部分并将其作为对象的属性输出:

$dateToSearch = '2022-08-21' 
$regex = "^(?<date>$dateToSearch)\s+(?<time>\d{2}:\d{2}:\d{2})\s+(?<number>[a-z\d]+)\s+(?<type>\w+)\s+=\.*"

Get-Content -Path '\log.log' | Where-Object { $_ -match $regex } | 
    Select-Object @{Name = 'Date'; Expression = {$matches['date']}},
                  @{Name = 'Time'; Expression = {$matches['time']}},
                  @{Name = 'Number'; Expression = {$matches['number']}},
                  @{Name = 'Type'; Expression = {$matches['type']}} |
    Export-CSV -Path '\output.csv' -NoTypeInformation

或者使用循环而不是计算属性:

$dateToSearch = '2022-08-21' 
$regex = "^(?<date>$dateToSearch)\s+(?<time>\d{2}:\d{2}:\d{2})\s+(?<number>[a-z\d]+)\s+(?<type>\w+)\s+=\.*"

Get-Content -Path '\log.log' | Where-Object { $_ -match $regex } | ForEach-Object {
    [PsCustomObject]@{
        Date   = $matches['date']
        Time   = $matches['time']
        Number = $matches['number']
        Type   = $matches['type']
    }
} | Export-CSV -Path '\output.csv' -NoTypeInformation

测试结果

Date       Time     Number Type 
----       ----     ------ ---- 
2022-08-21 09:06:09 15SS3B Equip
dwbf0jvd

dwbf0jvd2#

你要找这样的东西,我做了一行,同样可以做多行也行。

$line = "2022-06-21 09:06:09 15SS1B Equip = Z39 Text -0003254 Equipment has been added on-line"
$data = $line.Split("=")[0]
$result = $data.Split(" ") # A Space in between quotes
[pscustomObject]@{
   Date = $result[0]
   Time = $result[1]
   Number = $result[2]
   Type = $result[3]
}

相关问题