0

Powershellの質問

現在、私は5〜10個のログファイルをそれぞれ約20〜25 GB持っており、900個の異なる検索パラメータのいずれかが一致するかどうかを確認するために、それぞれを検索する必要があります。ログファイル全体で1つの検索パラメーターを検索する基本的なPowerShellスクリプトを作成しました。一致する場合は、結果が別のテキストファイルにダンプされますが、問題はかなり遅いことです。900個のパラメータすべてを一度に検索し、ログを1回だけ検索することで、これを高速化する方法があるかどうか疑問に思いました。スクリプトを改善するだけでも、どんな助けでもいいでしょう。

基本的な概要:

「アイテム」列の下にリストされている900アイテムすべてを含む1つのcsvファイル1つのログファイル(.txt)1つの結果ファイル(.txt)1つのps1ファイル

これがPS1ファイルのPowerShell用に以下にあるコードです:

$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>
}
4

2 に答える 2

0

確かに、これは、使用しているファイルサイズに基づいて使用するパーサーでは非常に苦痛になりますが、ログファイルが標準の形式(IISログファイルなど)の場合は、ログ解析の使用を検討できます。 Powershellの代わりにLogParserStudioなどのアプリ?

于 2013-02-26T21:53:48.740 に答える
0

900 の検索語句はかなり大きなグループです。正規表現を使用してサイズを小さくできますか? 単純な解決策は、ファイルを行ごとに読み取り、一致を探すことに基づいています。検索用語の正規表現またはリテラル文字列を含むコレクションを設定します。そのようです、

$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
于 2013-02-26T06:42:47.793 に答える