日志解析器:使用文本文件作为WHERE子句中的输入

时间:2016-12-26 11:29:54

标签: mysql sql batch-file where-in logparser

我正在处理批处理脚本,我正在使用Log Parser解析IIS日志。 所以,我在这里有两个问题:

Q1。我想要的是,不要看到在文本文件中写入用户名的条目。因此,可以更新该文本文件而无需担心代码语法。

换句话说,不是将每个用户名(大约30-50)放在' WHERE'条款使用' AND'再次&再次,我将有一个包含用户名列表的文本文件。

代码示例:

"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。我希望在提到的日期之间读取日志。所以,我用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

我得到的错误是:

  

错误:WHERE子句:语义错误:BETWEEN运算符的左区间("' 2016-02-15'")与操作数的类型不同(" date& #34)

请注意,Q2生成的输出文件在Q1中用作输入。

1 个答案:

答案 0 :(得分:0)

Q1:不使用logparser过滤数据,而是使用findstr/g:file /v开关来过滤输入文件或输出行(取决于具体情况)

Q2:字符串不是时间戳。使用

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