标题: [文本处理] 批处理查找/提取出大文本中含有指定字符串的行除了用findstr还有什么更好的方法 [打印本页]
作者: 我来了 时间: 2016-12-14 14:43 标题: 批处理查找/提取出大文本中含有指定字符串的行除了用findstr还有什么更好的方法
本帖最后由 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
自我测试,还可以,就想听听其他高人们的看法。
作者: 我来了 时间: 2016-12-15 11:42 标题: 6万行的TXT,如何快速得到文件总行数? 并找到某字符串所在的行数?
6万多行的TXT文件,如何快速得到文件总行数?
(并返回) 某字符串所在的行数?
链接: http://pan.baidu.com/s/1cuxIBO 密码: eaek
假设要找 4019E6
用findstr 差不多要 30多秒,返回结果来
按键精灵的 365插件算是里边比较快的方法了,还是返回速度太慢~~
作者: 我来了 时间: 2016-12-15 11:54
本帖最后由 我来了 于 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行号单独的取出来呢?
作者: Nsqs 时间: 2016-12-15 12:06
- set fso=CreateObject("Scripting.FileSystemObject")
- set regexp=new regexp
- file="pojie.alf"
- RegExp.Global=-1:RegExp.IgnoreCase=-1
- RegExp.Pattern="\r\n"
- t=timer
- read=fso.opentextfile(file).readall
- set Matches=RegExp.Execute(read)
- wsh.echo "共 "&Matches.Count&" 行, "&timer-t &" 秒"
- set fso=nothing:set Matches=nothing:set regexp=nothing
复制代码
经测试5秒出结果
作者: Nsqs 时间: 2016-12-15 12:11
回复 3# 我来了
另外你这文件才4m,不算有多大.但是这样的大文本不建议使用批处理,要说效率的话相对vbs会快很多
作者: 我来了 时间: 2016-12-15 12:39
回复 5# Nsqs
个人感觉vbs速度不行的,我试了几种方法 按键精灵中的代码还是很慢的。
作者: Nsqs 时间: 2016-12-15 12:56
回复 6# 我来了
要你这样说的话还来bat区发帖的意图是什么,bat是处理这类问题最弱的一个.你想求快用高级语言 什么vbs 按键精灵都不行.
用高级语言1G的文件5秒就能处理完
作者: Nsqs 时间: 2016-12-15 12:57
你要觉得vbs5秒算慢的你可以另寻他法
作者: GNU 时间: 2016-12-15 14:55
回复 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 秒
作者: GNU 时间: 2016-12-15 14:58
回复 3# 我来了
以冒号为分隔符,取第一列。- @echo off
- for /f "delims=:" %%i in ('findstr /n /l "4019E6" C:\Users\wcc\Desktop\call.txt') do (
- echo %%i
- )
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |