【发布时间】:2018-07-12 17:28:51
【问题描述】:
我之前问过这个问题,LotPings 提出了一个完美的结果。当与用户交谈时,这与我一开始只得到了一半的信息有关!
现在确切知道需要什么,我将再次解释该场景......
注意事项:
终端始终是 A 后跟 3 位数字,即 A123
用户 ID 位于日志文件的顶部,仅出现一次,始终以 89 开头,长度为六位数。该行将始终以 SELECTED FOR OPERATOR 89XXXX 开头
文件中有两个日期模式(一个是搜索日期,另一个是 DOB),每个都需要提取到单独的列中。并非所有记录都有 DOB,有些记录只有年份。
询问者并不总是以“C”开头,而是需要整行。
搜索结果总是有'查询',然后提取。
这是日志文件
L 交易记录从 01/05/2018 0001 到 31/05/2018 2359 选择运营商 891234 启动终端用户查询终端IP ==================================================== ==================================================== ===================== 18 年 1 月 5 日 1603 A555 CART87565 46573 RBCO NPC 服务 GW/10/0043 搜索查询记录编号:S48456/06P 章节代码 = 显示记录:S48853/98D 要求打印:单条记录 ==================================================== ==================================================== ===================== 18 年 3 月 5 日 1107 A555 CERT16574 BTD/54/1786 16475 REF 查询 DHF ID : 58/94710W 章节代码 = 显示记录:S585988/84H ==================================================== ==================================================== ===================== 24/05/18 1015 A555 CERT15473 19625 CBRS DDS 服务 NM/18/0199 图片查询名称:TREVOR SMITH CHAPTER CODE = 出生日期 : / /1957 ==================================================== ==================================================== ===================== 24/05/18 1025 A555 CERT15473 15325 CBRS DDS 服务 NM/12/0999 REF 查询 DDS ID : 04/102578R 章节代码 = ==================================================== ==================================================== =====================这是一个日志文件的示例,需要提取什么以及在什么标题下。
到这样的 CSV
PowerShell Script LotPings 完美运行,我只需要从第一行提取用户 ID,以说明并非所有具有 DOB 的记录并且存在不止一种类型的查询,即 Ref Enquiry、Search Enquiry、Image查询。
$FileIn = '.\SO_51209341_data.txt'
$TodayCsv = '.\SO_51209341_data.csv'
$RE1 = [RegEx]'(?m)(?<Date>\d{2}\/\d{2}\/\d{2}) (?<Time>\d{4}) +(?<Terminal>A\d{3}) +(?<User>C[A-Z0-9]+) +(?<Enquirer>.*)$'
$RE2 = [RegEx]'\s+SEARCH REF\s+NAME : (?<Enquiry>.+?) (PAGE|CHAPTER) CODE ='
$RE3 = [RegEx]'\s+DATE OF BIRTH : (?<DOB>[0-9 /]+?/\d{4})'
$Sections = (Get-Content $FileIn -Raw) -split "={30,}`r?`n" -ne ''
$Csv = ForEach($Section in $Sections){
$Row= @{} | Select-Object Date, Time, Terminal, User, Enquirer, Enquiry, DOB
$Cnt = 0
if ($Section -match $RE1) {
++$Cnt
$Row.Date = $Matches.Date
$Row.Time = $Matches.Time
$Row.Terminal = $Matches.Terminal
$Row.User = $Matches.User
$Row.Enquirer = $Matches.Enquirer.Trim()
}
if ($Section -match $RE2) {
++$Cnt
$Row.Enquiry = $Matches.Enquiry
}
if ($Section -match $RE3){
++$Cnt
$Row.DOB = $Matches.DOB
}
if ($Cnt -eq 3) {$Row}
}
$csv | Format-Table
$csv | Export-Csv $Todaycsv -NoTypeInformation
【问题讨论】:
-
Select-String '(?<=FOR OPERATOR\s+)\d+' | Select-Object -Expand Mateches | Select-Object -Expand Value
标签: powershell csv logging extraction