标题: [文本处理] findstr能读取指定文件中包含指定字符串的最后一行内容吗? [打印本页]
作者: psstudio 时间: 2018-12-11 12:29 标题: findstr能读取指定文件中包含指定字符串的最后一行内容吗?
有一个LOG文件需要读取和判断,需要的字符串一般出现在LOG文件的最后一行,开始的时候用这个代码:- for /f "usebackq delims=" %%i in ("C:\Program Files (x86)\zpp\adb.log") do (echo %%i > lastline.txt)
复制代码
,发现在当程序运行的时候并不能读取,只能先复制出来才可以。会出现(系统找不到文件 C:\Program Files (x86)\zpp\adb.log。)而且效率不并高,把LOG文件逐行内容读取到 lastline.txt里,随着LOG的变大,时间会越来越长。后面发现findstr 可以直接查找指定的字符串,再用代码:- for /F "tokens=4 delims=[]" %%a in ('findstr /c:"sr = error_shell_ok, ir = error_insufficient_storage" "C:\Program Files (x86)\zpp\adb.log"') do (echo %%a)
复制代码
,可以很准确的读出来指定的字符串,但是有个问题就是它会把LOG文件里所有符合条件的字符串都读出来,但是程序要求是读取最新的资料,一般这个字符串都在LOG文件的最后一行里,请教一下有没有什么好办法可以做到~。用findstr这条命令的话。附上LOG文件。
作者: psstudio 时间: 2018-12-11 12:31
像上面的LOG文件,只取最后一行,也就是最新的内容里的6334赋值给一个变量,方便后续操作~
作者: Batcher 时间: 2018-12-11 13:21
- for /F "tokens=4 delims=[]" %%a in ('findstr /c:"sr = error_shell_ok, ir = error_insufficient_storage" "C:\Program Files (x86)\zpp\adb.log"') do (
- set "str=%%a"
- )
- echo %str%
复制代码
这样可以吗?
作者: psstudio 时间: 2018-12-11 13:32
这样肯定是可以的,但是感觉效率不高,有没有能直接读取最后一行的操作~。。嘿嘿。。
作者: psstudio 时间: 2018-12-11 13:33
LOG文件有时会很大,几十M都有可能的~
作者: Batcher 时间: 2018-12-11 15:29
回复 5# psstudio
用那个几十M的文件测试一下3楼代码,看看需要多少秒?
作者: yhcfsr 时间: 2018-12-11 15:42
本帖最后由 yhcfsr 于 2018-12-11 15:49 编辑
实测117万行数据(97M) 1秒内完成- findstr /c:"sr = error_shell_ok, ir = error_insufficient_storage" adb.log.txt|gawk "END{print}"
复制代码
GAWK下载
作者: xczxczxcz 时间: 2018-12-11 16:09
来个更快的- Powershell "gc 'xxxx\xxx.log' -readcount 0 -tail 1"
复制代码
作者: psstudio 时间: 2018-12-12 15:21
膜拜楼上的大神。。。。。。
作者: Batcher 时间: 2018-12-12 16:22
回复 7# yhcfsr
去掉findstr,直接用gawk做字符串匹配,效果如何呢?
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |