Board logo

标题: [文本处理] [已解决]批处理如何判断txt最后10行是否包含某些字符串并输出这些行? [打印本页]

作者: zrf0123    时间: 2018-6-30 23:06     标题: [已解决]批处理如何判断txt最后10行是否包含某些字符串并输出这些行?

判断一较大文件 123.txt的最后10行:如果含有字符串“错误” 和“AutoConfig”,则把该文件复制到指定位置d:\456.txt;
提取456.txt的倒数第4行的前6个字符,并输出最后20行中包含该6个字符串的所有行到一个文件d:\789.txt
批处理能快速做到这些吗?请大家帮忙,谢谢!

123.txt的内容
信息 2018/6/30 22:13:09 Microsoft-Windows-Kernel-General 1 无
信息 2018/6/30 22:11:10 Microsoft-Windows-Kernel-General 1 无
信息 2018/6/30 22:07:57 Service Control Manager
信息 2018/6/30 22:03:10 Service Control Manager
信息 2018/6/30 22:03:10 Service Control Manager
错误 2018/6/30 22:03:10 Service Control Manager
错误 2018/6/30 22:03:10 Service Control Manager
信息 2018/6/30 22:03:09 Microsoft-Windows-Kernel-General 1 无
信息 2018/6/30 22:03:07 Service Control Manager
信息 2018/6/30 22:03:05 Service Control Manager
信息 2018/6/30 22:03:05 Microsoft-Windows-WLAN-AutoConfig 4000 无
信息 2018/6/30 22:03:05 Service Control Manager
错误 2018/6/30 22:03:05 Service Control Manager
信息 2018/6/30 7:08:02 Service Control Manager
信息 2018/6/30 7:08:02 Service Control Manager
信息 2018/6/30 7:08:00 Microsoft-Windows-Winlogon 7001 -1101
信息 2018/6/30 7:08:00 Service Control Manager
信息 2018/6/30 7:08:00 Microsoft-Windows-WLAN-AutoConfig 4000 无
信息 2018/6/30 7:08:00 Service Control Manager
信息 2018/6/30 7:08:00 Microsoft-Windows-DHCPv6-Client 51046 服务状态事件
错误 2018/6/30 7:08:00 Service Control Manager
信息 2018/6/30 7:08:00 Microsoft-Windows-Dhcp-Client 50036 服务状态事件
信息 2018/6/30 7:08:00 Service Control Manager
信息 2018/6/30 7:08:00 Service Control Manager
作者: 狄钦dQ    时间: 2018-7-2 11:51

论坛内已经有好多类似的帖子,楼主自己先搜下,尝试自己解决吧
作者: cfwyy77_bat    时间: 2018-7-2 12:21

个人感觉这种纯P困难,就用python写了个 用不了几行可以搞定。不过大文件没测试 没怎么考虑效率。
  1. import shutil
  2. str1 = "错误"
  3. str2 = "AutoConfig"
  4. file = "123.txt"
  5. file2 = "d:\\456.txt"
  6. file3 = "d:\\789.txt"
  7. with open(file,encoding="utf-8") as f:
  8.     last10 = "".join(list(f)[-10:])
  9. if str1 in last10 and str2 in last10:
  10.     shutil.copy(file, file2)
  11.     with open(file2,encoding="utf-8") as f:
  12.         flst = list(f)
  13.         last4th6chars = flst[-4][:6]    #前6个是  "错误 201"
  14.         with open(file3,"w",encoding="utf-8") as fw:
  15.             for line in flst[-20:]:
  16.                 if last4th6chars in line: fw.write(line)
复制代码

作者: Batcher    时间: 2018-7-2 12:38

以顶楼数据为例,提取456.txt的倒数第4行的前6个字符,希望得到的结果是什么?
作者: zrf0123    时间: 2018-7-21 11:29

回复 3# cfwyy77_bat


    谢谢回复,已经解决!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2