[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] findstr能读取指定文件中包含指定字符串的最后一行内容吗?

有一个LOG文件需要读取和判断,需要的字符串一般出现在LOG文件的最后一行,开始的时候用这个代码:
  1. 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 可以直接查找指定的字符串,再用代码:
  1. 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文件。

像上面的LOG文件,只取最后一行,也就是最新的内容里的6334赋值给一个变量,方便后续操作~

TOP

  1. 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 (
  2.     set "str=%%a"
  3. )
  4. echo %str%
复制代码
这样可以吗?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

这样肯定是可以的,但是感觉效率不高,有没有能直接读取最后一行的操作~。。嘿嘿。。

TOP

LOG文件有时会很大,几十M都有可能的~

TOP

回复 5# psstudio


    用那个几十M的文件测试一下3楼代码,看看需要多少秒?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 yhcfsr 于 2018-12-11 15:49 编辑

实测117万行数据(97M) 1秒内完成
  1. findstr /c:"sr = error_shell_ok, ir = error_insufficient_storage" adb.log.txt|gawk "END{print}"
复制代码
GAWK下载
QQ 33892006

TOP

来个更快的
  1. Powershell "gc 'xxxx\xxx.log' -readcount 0 -tail 1"
复制代码

TOP

膜拜楼上的大神。。。。。。

TOP

回复 7# yhcfsr


    去掉findstr,直接用gawk做字符串匹配,效果如何呢?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表