我有多个服务器日志文件。它们总共包含大约500.000行日志文本。我只想保留包含“已下载”和“日志”的行。我要排除的行集中在错误日志和基本系统操作上,例如“客户端启动”,“客户端重新启动”等。
我们要查找的行的示例如下:
[22:29:05]: Downloaded 39 /SYSTEM/SAP logs from System-4, customer (000;838) from 21:28:51,705 to 21:29:04,671
应保留的行应由日期字符串补充,该字符串是日志文件名称的一部分。 ($ date)
此外,由于接收到的日志相当不规则,因此应将过滤后的文件转换为一个csv文件(列:时间戳,日志下载,系统目录,系统类型,客户,开始时间,结束时间,日期[从文件名添加到每行)。将空格分隔为逗号的替换操作只是第一次尝试为数据引入某种结构。该文件应加载到python仪表板程序中。
目前,需要3,5分钟来预处理3个Txt文件,而即使有可能,最大目标是5-10秒。
非常感谢您的支持,因为自上周星期一以来我一直在为此而努力。也许Powershell不是最好的方法?我愿意提供任何帮助!
此刻,我正在运行以下Powershell脚本:
$files = Get-ChildItem "C:\Users\AnonUser\RestLogs\*" -Include *.log
New-Item C:\Users\AnonUser\RestLogs\CleanedLogs.txt -ItemType file
foreach ($f in $files){
$date = $f.BaseName.Substring(22,8)
(Get-Content $f) | Where-Object { ($_ -match 'Downloaded' -and $_ -match 'SAP')} | ForEach-Object {$_ -replace " ", ","}{$_+ ','+ $date} | Add-Content CleanedLogs.txt
}
答案 0 :(得分:1)
这是我可以管理的最快速度。我没有使用-split
与-replace
或特殊的.NET方法进行测试:
$files = Get-ChildItem "C:\Users\AnonUser\RestLogs\*" -Include *.log
New-Item C:\Users\AnonUser\RestLogs\CleanedLogs.txt -ItemType file
foreach ($f in $files) {
$date = $f.BaseName.Substring(22,8)
(((Get-Content $f) -match "Downloaded.*?SAP") -replace " ",",") -replace "$","$date" | add-content CleanedLogs.txt
}
通常,通过消除循环和Where-Object
“过滤”可以提高速度。