首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在巨大的日志文件中搜索多个字符串

在巨大的日志文件中搜索多个字符串
EN

Stack Overflow用户
提问于 2013-02-26 12:46:24
回答 2查看 930关注 0票数 0

Powershell问题

目前我有5-10个日志文件,每个大约20-25 10,需要搜索它们中的每一个,以检查900个不同的搜索参数中是否有匹配的。我已经编写了一个基本的powershell脚本,它将在整个日志文件中搜索1个搜索参数。如果匹配,它会将结果转储到一个单独的文本文件中,问题是它相当慢。我想知道是否有一种方法可以通过让它一次搜索所有900个参数并只查看一次日志来加速这一过程。任何帮助都是好的,即使只是改进脚本。

基本概述:

1个csv文件,其中所有900个项目列在"item“列1日志文件(.txt) 1结果文件(.txt) 1 ps1文件下

下面是我在PS1文件中为powershell编写的代码:

代码语言:javascript
复制
$search = filepath to csv file<br>
$log = "filepath to log file"<br>
$result = "file path to result text file"<br>
$list = import-csv $search <br>


foreach ($address in $list) {<br>
Get-Content $log | Select-String $address.item | add-content $result <br>

*"#"below is just for displaying a rudimentary counter of how far through searching it is <br>*
$i = $i + 1 <br>
echo $i <br>
}
EN

回答 2

Stack Overflow用户

发布于 2013-02-26 14:42:48

900个搜索词是一个相当大的群体。你能通过使用正则表达式来减小它的大小吗?一种简单的解决方案是逐行读取文件并查找匹配项。设置一个包含搜索项的regexp或文本字符串的集合。就像这样,

代码语言:javascript
复制
$terms = @("Keyword[12]", "KeywordA", "KeyphraseOne") # Array of regexps
$src = "path-to-some-huge-file" # Path to the file
$reader = new-object IO.StreamReader($src) # Stream reader to file

while(($line = $reader.ReadLine()) -ne $null){ # Read one row at a time

    foreach($t in $terms) { # For each search term...
        if($line -match $t) { # check if the line read is a match...
            $("Hit: {0} ({1})" -f $line, $t) # and print match
        }
    }
}
$reader.Close() # Close the reader
票数 0
EN

Stack Overflow用户

发布于 2013-02-27 05:53:49

当然,在您使用的任何解析器上,这将是令人难以置信的痛苦,但如果您的日志文件是标准格式(例如IIS日志文件),那么您可以考虑使用log parser Studio等log Parser应用程序而不是Powershell?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15081533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档