我想使用本机Windows命令行工具或批处理文件(.bat)从日志文件中提取某些行。这是一个示例日志文件:
2009-12-07 14:32:38,669 INFO Sample log
2009-12-07 14:32:43,029 INFO Sample log
2009-12-07 14:32:45,841 DEBUG Sample log
2009-12-07 14:32:45,841 DEBUG Sample log
2009-12-07 14:32:52,029 WARN Sample log
2009-12-07 14:32:52,466 INFO Sample log
如何提取和打印带有“WARN”标签的行?如何使用PowerShell执行此操作?
答案 0 :(得分:7)
一种方式:
findstr WARN log.txt
更复杂:
for /f "tokens=1,2,3,4* delims=, " %i in (log.txt) do @if "%l"=="WARN" echo %i %j %m
OUTPUT:
2009-12-07 14:32:52 Sample log
答案 1 :(得分:7)
您可以使用select-string:
使用PowerShell执行此操作select-String WARN *.log
答案 2 :(得分:2)
如果PowerShell(由Alon建议)不是一个选项,也许Logparser可以满足您的需求:http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&displaylang=en
答案 3 :(得分:1)
有几种方法,findtr / find就像别人给你看的那样。或者你可以使用vbscript
Set objFS=CreateObject("Scripting.FileSystemObject")
Set objArgs = WScript.Arguments
strFile= objArgs(0)
Set objFile = objFS.OpenTextFile(strFile)
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
If InStr(strLine,"WARN") > 0 Then
WScript.Echo strLine
End If
Loop
另存为mygrep_warn.vbs并在命令行
c:\test> cscript //nologo mygrep_warn.vbs myfile.log
其他方法,如果您可以下载内容并使用GNU *nix tools ported to win32
C:\test>grep -i "warn" file
2009-12-07 14:32:52,029 WARN Sample log
C:\test>gawk "BEGIN{IGNORECASE=1}/warn/" file
2009-12-07 14:32:52,029 WARN Sample log
答案 4 :(得分:1)
Get-EventLog -LogName application -EntryType warning
并根据需要导出输出
答案 5 :(得分:0)
你可以随时尝试原始的DOS“查找”命令,但它非常糟糕:
c:>find " WARN " filename.log
---------- FILENAME.LOG
2009-12-07 14:32:52,029 WARN Sample log
c:>
您也不能在文件名中使用通配符。