找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25573|回复: 9

[文本处理] 批处理查找/提取出大文本中含有指定字符串的行除了用findstr还有什么更好的方法

[复制链接]
发表于 2016-12-14 14:43:27 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-12-15 11:49 编辑

我写的findstr正则表达 还有问题么?请指导
findstr /i /c:" call " D:\t.alf>D:\call.txt


只要
:00XXXXXX                             call  这样的行

00跟6个16进制数值                    call  这样的行


链接: http://pan.baidu.com/s/1cuxIBO 密码: eaek

自我测试,还可以,就想听听其他高人们的看法。

评分

参与人数 1PB -8 收起 理由
pcl_test -8 勿发笼统的标题

查看全部评分

 楼主| 发表于 2016-12-15 11:42:38 | 显示全部楼层

6万行的TXT,如何快速得到文件总行数? 并找到某字符串所在的行数?

6万多行的TXT文件,如何快速得到文件总行数?
(并返回) 某字符串所在的行数?

链接: http://pan.baidu.com/s/1cuxIBO 密码: eaek








假设要找 4019E6


用findstr 差不多要 30多秒,返回结果来


按键精灵的 365插件算是里边比较快的方法了,还是返回速度太慢~~

评分

参与人数 1PB -30 收起 理由
pcl_test -30 勿重复发贴

查看全部评分

 楼主| 发表于 2016-12-15 11:54:08 | 显示全部楼层
本帖最后由 我来了 于 2016-12-15 12:12 编辑

findstr /n /c:"4019E6" C:\Users\wcc\Desktop\call.txt>c:\test.txt

20996:4019E6 E8C5ED1D00 call 005E07B0

这个结果对了,如何把/n   这个20996行号单独的取出来呢?
发表于 2016-12-15 12:06:22 | 显示全部楼层
  1. set fso=CreateObject("Scripting.FileSystemObject")
  2. set regexp=new regexp
  3. file="pojie.alf"
  4. RegExp.Global=-1:RegExp.IgnoreCase=-1
  5. RegExp.Pattern="\r\n"
  6. t=timer
  7. read=fso.opentextfile(file).readall
  8. set Matches=RegExp.Execute(read)
  9. wsh.echo "共 "&Matches.Count&" 行, "&timer-t &" 秒"
  10. set fso=nothing:set Matches=nothing:set regexp=nothing
复制代码
经测试5秒出结果

评分

参与人数 1技术 +1 收起 理由
我来了 + 1 感谢来回贴。

查看全部评分

发表于 2016-12-15 12:11:31 | 显示全部楼层
回复 3# 我来了


    另外你这文件才4m,不算有多大.但是这样的大文本不建议使用批处理,要说效率的话相对vbs会快很多
 楼主| 发表于 2016-12-15 12:39:03 | 显示全部楼层
回复 5# Nsqs



个人感觉vbs速度不行的,我试了几种方法 按键精灵中的代码还是很慢的。
发表于 2016-12-15 12:56:13 | 显示全部楼层
回复 6# 我来了


    要你这样说的话还来bat区发帖的意图是什么,bat是处理这类问题最弱的一个.你想求快用高级语言 什么vbs 按键精灵都不行.
用高级语言1G的文件5秒就能处理完
发表于 2016-12-15 12:57:01 | 显示全部楼层
你要觉得vbs5秒算慢的你可以另寻他法
发表于 2016-12-15 14:55:45 | 显示全部楼层
回复 2# 我来了


我用你这个100多万行的文件做测试,几种写法差别不大,都是1秒左右。pojie.alf 1014043 行:

findstr /n /c:"4019E6" pojie.alf > 1.txt
1.0908114 秒

findstr /n "4019E6" pojie.alf > 1.txt
1.0850946 秒

findstr /n /l "4019E6" pojie.alf > 1.txt
1.0791707 秒
发表于 2016-12-15 14:58:50 | 显示全部楼层
回复 3# 我来了


以冒号为分隔符,取第一列。
  1. @echo off
  2. for /f "delims=:" %%i in ('findstr /n /l "4019E6" C:\Users\wcc\Desktop\call.txt') do (
  3.     echo %%i
  4. )
  5. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 13:54 , Processed in 0.023887 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表