2016-12-26 22 views
0

ログパーサーを使用してIISログを解析するバッチスクリプトを作成しています。 ここに2つの質問があります:ログパーサー:WHERE節のテキストファイルを入力として使用する

Q1。私が望むのは、ユーザー名がテキストファイルに書き込まれたエントリを表示しないことです。したがって、コードの構文を気にせずにそのテキストファイルを更新することができます。

つまり、再び 'AND'を使用して 'WHERE'句にすべてのユーザー名(約30-50である可能性があります)を入力するのではなく、&のユーザー名のリストを持つテキストファイルを作成します。

コード例:

"LogParser.exe" -i:csv "SELECT DISTINCT date, cs-username, clientun, cs-uri-stem FROM D:\temp.csv WHERE NOT cs-username IN ('NULL';'abc';'def';'hij';'and_so_on')" >D:\final_output.txt -o:NAT -rtp:-1 

私が最初にサブクエリを経由してこれを行うにしようとしていたが、それは、それが思わログパーサでサポートされていません。 OPENROWSETを解決策hereとして見つけましたが、それは私のために働いているようには見えないか、それを動作させる方法が得られないかもしれません。 私が見つけたその他の解決策はSQL用であり、ログパーサーでは機能しませんでした。

Q2。私は、上記の日付の間にログを読みたいと思っています。 、注意してください

Error: WHERE clause: Semantic Error: left interval of BETWEEN operator ("'2016-02-15'") has a different type than operand ("date")

:だから、私は、YYYY-MM-DD形式で開始し、ユーザからの終了日を取って、クエリでそれらを置く

"LogParser.exe" -i:iisw3c "SELECT DISTINCT cs-username, REVERSEDNS(C-IP), date, cs-uri-stem, FROM \logs\location\* WHERE date BETWEEN %date_1% AND %Date_2%" >D:\temp.csv -o:csv 

を私はここに来るの誤差があるのですQ2から生成された出力ファイルはQ1の入力として使用されます。

答えて

0

Q1:代わりに入力ファイルまたは出力ラインをフィルタリングするLOGPARSER使用findstr/g:file /vスイッチを使用してデータをフィルタリングする(場合によっては)

Q2:文字列はタイムスタンプではありません。使用

BETWEEN TO_TIMESTAMP('%date_1%','yyyy-MM-dd') AND TO_TIMESTAMP('%date_2%','yyyy-MM-dd') 
+0

Okです。だから、もし私が 'findstr'を使うならば。 '/ v'パラメータにファイルを置くことはできますか? Like 'findstr/v excluded.txt' このように、ファイルには除外するユーザー名があります。 –

+0

@MoktikDhawan、 '/ v'は指定された文字列/パターンと一致しない行を尋ねますが、'/g:file.txt'スイッチを使って一致する文字列/パターンのソースを示します。 2つの組み合わせは、ファイル内の文字列/パターンと一致しない行を取得します。 –

+0

これを入手しました。私はパラメータとして/ g:ファイルを見ませんでした。私はそれが別の機能だと思った。私の悪い。私はこれを一度試して更新します!どうもありがとう。 –

関連する問題