背景:使用CTS框架运行完测试后,会在logs中生成devices_log和host_log,在results中生成相应的结果(报告)。根据报告信息我们可以得知失败的用例,但是却不能知道为什么用例会失败,是脚本有问题?设备有问题?还是其他.....。此时我们就得通过 截图、视频、log等信息进行分析。然而事实却是很痛苦的,打开log一看密密麻麻的,整个module的日志都在这里面。我就看失败的那条日志,难道还要我选中一段,然后Ctrl+C、Ctrl+V吗?那条用例的log有上千行啊!mmp(通过关键字查找虽然能找到失败的那条,想再进行过滤的话,总是会被其他日志干扰)

问题:我怎样才能拿到我想要的那段log呢?

思路:从log看到会有“TestRunner:started:” 和“TestRunner: finished:”字符串,也就是用例的开始和结束。只要拿到开始和结束的行数就行了。

解决:输入行数提取文本内容。

No1:输入需要截取文本内容的开始和结束行即可。

  1. @echo off &setlocal enabledelayedexpansion
  2. title ExtractContent
  3. color 0a
  4. rem ++++++++++++++++++++++++++++++++++++++++
  5. rem Extract.bat
  6. rem By zhzw @2018/1/18
  7. rem
  8. rem Version: 1.0
  9. rem ++++++++++++++++++++++++++++++++++++++++
  10. echo 1.Can't handle empty lines
  11. :next
  12. echo.
  13. echo 请输入开始行和结束行^>^>^>
  14. set /p sRow=StartRow:
  15. set /p eRow=EndRow:
  16.  
  17. set stime=%time:~0,2%%time:~3,2%%time:~6,2%%time:~9,2%
  18. if "%stime:~0,1%"==" " set "stime=0%stime:~1%"
  19. set /a sRow=%sRow%-1
  20. if "%sRow%"=="0" (set sRow=) else set sRow=skip=%sRow%
  21.  
  22. set start=%sRow:~5%
  23. set stop=%eRow%
  24. if "%stop%"=="" echo."EndRow" cant be equal to null &goto done
  25.  
  26. for /f "%sRow% tokens=* delims=" %%a in (device_logcat.txt) do (
  27. rem echo %sRow%
  28. set /a start+=1
  29. echo %stop%----!start!
  30. echo.%%a >>%stime%.txt
  31. if "%stop%"=="!start!" goto end
  32. )
  33. :end
  34. echo done
  35. set etime=%time:~0,2%%time:~3,2%%time:~6,2%%time:~9,2%
  36. if "%etime:~0,1%"==" " set "etime=0%time:~1%"
  37. echo 开始时间:%stime%
  38. echo 结束时间:%etime%
  39. rem timeout /t 2 &exit
  40. :done
  41. ping 127.0.0.1 -n 3 >nul 2>nul &echo.
  42. echo 终止提取Ctrl+C;继续提取,请按任意键继续...&pause >nul
  43. cls &echo.Try again extract...&goto next

上面的方法不能处理空行(默认不会把空行算为一行),如果文本中出现空行则会导致与所需要的文本内容行数有相差。速度快(貌似是个完美主义者!~_~)

No2:处理了空行的问题。如果行数过大且文本超过MB,读取速度慢,而且行数相差大。(读取整个文本>忽略开始行数-1>截取分隔>写入文本)

  1. @echo off
  2. title ExtractContent
  3. color 0a
  4. rem @mode con lines=35 cols=75
  5. rem ++++++++++++++++++++++++++++++++++++++++
  6. rem Extract.bat
  7. rem By zhzw @2018/1/18
  8. rem
  9. rem Version: 1.0.1
  10. rem ++++++++++++++++++++++++++++++++++++++++
  11. echo 1."StartRow" and "EndRow" cant be equal to null
  12. echo.
  13. set /p sRow=StartRow:
  14. set /p eRow=EndRow:
  15.  
  16. set stime=%time:~0,2%%time:~3,2%%time:~6,2%
  17. if "%stime:~0,1%"==" " set "stime=0%stime:~1%"
  18. set /a sRow=%sRow%-1
  19. if "%sRow%"=="0" (set sRow=) else set sRow=skip=%sRow%
  20.  
  21. for /f "%sRow% tokens=1,* delims=:" %%a in ('findstr /n ".*" device_logcat.txt') do (
  22. rem echo %sRow%
  23. echo %eRow%----%%a
  24. echo.%%b >>%stime%.txt
  25. if %eRow%==%%a goto end
  26. )
  27. :end
  28. echo.
  29. echo done
  30. set etime=%time:~0,2%%time:~3,2%%time:~6,2%
  31. if "%etime:~0,1%"==" " set "etime=0%time:~1%"
  32. echo 开始时间:%stime%
  33. echo 结束时间:%etime%
  34. rem timeout /t 2 &exit
  35. pause

No3:弥补数据准确性的问题,大行数时速度慢[No1>No3>No2]。(以行号查找文本中指定行>写入文本)

  1. @echo off &setlocal enabledelayedexpansion
  2. title ExtractContent
  3. color 0a
  4. rem ++++++++++++++++++++++++++++++++++++++++
  5. rem Extract.bat
  6. rem By zhzw @2018/1/18
  7. rem
  8. rem Version: 1.0.2
  9. rem ++++++++++++++++++++++++++++++++++++++++
  10. echo 1."StartRow" and "EndRow" cant be equal to null
  11. echo.
  12. set /p sRow=StartRow:
  13. set /p eRow=EndRow:
  14.  
  15. set stime=%time:~0,2%%time:~3,2%%time:~6,2%
  16. if "%stime:~0,1%"==" " set "stime=0%stime:~1%"
  17.  
  18. set start=%sRow%
  19. set /a stop=%eRow%+1
  20. echo.
  21. :replay
  22. rem echo %start%
  23. for /f "tokens=1,* delims=:" %%a in ('findstr /n ".*" device_logcat.txt ^| findstr /b "\<%start%:"') do (
  24. set /a start+=1
  25. echo %stop%----!start!
  26. if "%stop%"=="!start!" goto end
  27. echo.%%b >>%stime%.txt &goto replay
  28. )
  29. :end
  30. echo.&echo done
  31. set etime=%time:~0,2%%time:~3,2%%time:~6,2%
  32. if "%etime:~0,1%"==" " set "etime=0%etime:~1%"
  33. echo 开始时间:%stime%
  34. echo 结束时间:%etime%
  35. rem timeout /t 2 &exit
  36. pause

去除空行处理:

  1. type a.txt | findstr /v "^$"

  

bat如何提取文本指定行的内容的更多相关文章

  1. css3实现超出文本指定行数(指定文本长度)用省略号代替

    测试代码: <!DOCTYPE html> <html> <head> <meta name="viewport" content=&qu ...

  2. Linux查看文件指定行数内容

    1.tail date.log               输出文件末尾的内容,默认10行 tail -20  date.log        输出最后20行的内容 tail -n -20  date ...

  3. 【Sed】使用sed删除文件指定行的内容

    sed多看帮助文档,受益良多 sed -i '$d' filename 例如删除 /etc/profile的最后一行 cat -n /etc/profile ...    101  export PA ...

  4. Linux 显示文本指定行内容

    主要采用sed.head和tail命令 如果文本中使用了 \n 这类符号,cat命令会把它当成换行符,结果会出错 $ sed -n "10p" move.sh   # 显示第10行 ...

  5. Shell 获取指定行的内容

    需求: 有一个文件,根据指定的字符串,得到该字符串上两行的内容. 文件内容如下: linux-56:# cat sys.ttconnect.ini # Copyright (C) 1999, 2006 ...

  6. php替换文件指定行的内容

    //第一种 利用file 函数 读取文件,每一行都是一个数组元素 $arr = file($file); $arr[$line] = "hello"; file_put_conte ...

  7. linux在文件中包含某个关键词的指定行插入内容

    1. 在包含某个关键字的行上面插入一行文字 sed -i '/wangzai/i\doubi' 1.txt 把内容doubi插入到包含wangzai关键字的上一行 2. 在包含某个关键字的行下面插入一 ...

  8. linux 向文本指定位置写入内容

    sed -i "37 r a.txt" test.txt ====== 向test.txt 的第37行后,也就是38行后写入a.txt的内容 sed -i "38i aa ...

  9. 利用css3实现超出文本指定行数与省略号效果

    <style> .text1 {/*单行*/ width:200px; overflow:hidden; text-overflow:ellipsis; -o-text-overflow: ...

随机推荐

  1. scrapy和scrapy_redis入门

    Scarp框架 需求 获取网页的url 下载网页内容(Downloader下载器) 定位元素位置, 获取特定的信息(Spiders 蜘蛛) 存储信息(ItemPipeline, 一条一条从管里走) 队 ...

  2. spring-core 中 asm 包的作用

    asm包中主要有以下这些类 其中, AnnotationVisitor类:是一个抽象类,定义在解析注解时会触发的事件,如解析到一个基本值类型的注解.enum值类型的注解.Array值类型的注解.注解值 ...

  3. python web cgi

    知识详解: cgi:通用网关接口,网络脚本的解析 python cgi 自带有cgi轻量级服务器,我们通过cgi命令可以开启该服务器 python2 python -m CGIHTTPServer p ...

  4. (2)Java数据结构--二叉树 -和排序算法实现

    === 注释:此人博客对很多个数据结构类都有讲解-并加以实例 Java API —— ArrayList类 & Vector类 & LinkList类Java API —— BigDe ...

  5. Web方面的错误, 异常来自hresult:0x80070057(E_INVALIDARG)

    删除 C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET files 这个文件夹. 解决方法: 1.代码保存频繁一点.做一个 ...

  6. OGG选择捕捉和应用模式

    本章包含的信息可帮助您确定适用于数据库环境的捕获和应用模式. 主题: Oracle GoldenGate捕获和应用进程概述 决定使用哪种捕捉方法 决定使用哪种应用方法 同时使用不同的捕捉和应用模式 切 ...

  7. css利用padding百分比实现图片自适应高度

    应用场景 宽高比率,实现图片自适应高度,防止图片加载过程高度为0,加载完图片高度撑起,它下面的div抖动问题 重点:CSS百分比padding都是相对宽度计算的 <div class=" ...

  8. Git学习笔记06-版本回退

    在实际中,向版本库提交多次后,几千行代码肯定不记得每次都改了什么,可以使用git log来查看提交日志.也就是git commit -m 后面填写的这部分内容 ​ 也可以使用git log --pre ...

  9. 007_Chrome的Waterfall详解

    一. 浏览器根据html中外连资源出现的顺序,依次放入队列(Queue),然后根据优先级确定向服务器获取资源的顺序.同优先级的资源根据html中出现的先后顺序来向服务器获取资源 Queueing. 出 ...

  10. MySQL 索引原理相关文章

    CSDN的整理: http://bbs.csdn.net/topics/392265880 引擎在磁盘中存储顺序的图解: http://blog.csdn.net/php_lzr/article/de ...