标题: [文本处理] 批处理怎样根据文本内容 到文本文件里去查询结果 并复制? [打印本页]
作者: necnec1 时间: 2015-9-23 10:43 标题: 批处理怎样根据文本内容 到文本文件里去查询结果 并复制?
本帖最后由 necnec1 于 2015-9-23 18:09 编辑
文本文件AA.TXT 内容如下
http://www.XXX.com/@北京@文件@CT1000@77*12535*85688@XXX有限公司@1.284@13760.0@ECT0011615@5503013330@
http://www.XXX.com/@上海@文件@EGA20@1332*244170*644280@XXX有限公司@1.284@13760.0@ECT0011615@AE03013340@
http://www.XXX.com//@内蒙古@文件@CGCC@245*190430*674450@XXX有限公司@2.517@133750.0@ECT0018222@5605314200@
在行尾用2个@圈定的的数字 5503013330 AE03013340 5605314200 是重要的数据
在C盘根目录下的AA子目录下有几万个文本文件 总共大概有900多M 我想根据上面数据 去查找
我就假设在C盘根目录下的AA子目录下的12345.TXT里找到了5503013330这个数字 就将12345.TXT里所有的内容复制到
http://www.XXX.com/@北京@文件@CT1000@77*12535*85688@XXX有限公司@1.284@13760.0@ECT0011615@5503013330@ 的后面
最后的结果类似于这样
http://www.XXX.com/@北京@文件@CT1000@77*12535*85688@XXX有限公司@1.284@13760.0@ECT0011615@5503013330@
sdfefsf5503013330f3fsf
dsa234235503013330fdsfdsf
http://www.XXX.com/@上海@文件@EGA20@1332*244170*644280@XXX有限公司@1.284@13760.0@ECT0011615@AE03013340@
www.asef.comAE03013340fdsfdsf
http://www.XXX.com//@内蒙古@文件@CGCC@245*190430*674450@XXX有限公司@2.517@133750.0@ECT0018222@5605314200@
fsdfdsfds33e4335605314200fdsfds
由于几万个文本 有900多M 相当大 效率很重要 请会的朋友帮帮忙
作者: pcl_test 时间: 2015-9-23 20:11
如果匹配到多个文件呢,多个文件的所有内容都复制某条记录后面?后面又是什么情况?同一行?
作者: necnec1 时间: 2015-9-23 20:38
本帖最后由 necnec1 于 2015-9-23 20:54 编辑
回楼主 不会出现多个文件匹配的问题 我的关键字具有唯一性 只可能出现在一个文本文件中 其实只要找到对应的文本文件 后面就不需要再搜索了 直接 将里面的内容复制到AA.TXT 每一行的后面即可
你说的 后面又是什么情况?同一行? 是这样
文本文件AA.TXT 内容像这样的 一行一组 总共3组数据 每一组行尾的2个@中间的那个数 就是我需要的结果 就拿第一组来说 5503013330
http://www.XXX.com/@北京@文件@CT1000@77*12535*85688@XXX有限公司@1.284@13760.0@ECT0011615@5503013330@
http://www.XXX.com/@上海@文件@EGA20@1332*244170*644280@XXX有限公司@1.284@13760.0@ECT0011615@AE03013340@
http://www.XXX.com//@内蒙古@文件@CGCC@245*190430*674450@XXX有限公司@2.517@133750.0@ECT0018222@5605314200@
我需要的最后结果就是
http://www.XXX.com/@北京@文件@CT1000@77*12535*85688@XXX有限公司@1.284@13760.0@ECT0011615@5503013330@
FDASFDSA5503013330FDSAFDSA 这一行就是搜索到的文本文件里的内容
http://www.XXX.com/@上海@文件@EGA20@1332*244170*644280@XXX有限公司@1.284@13760.0@ECT0011615@AE03013340@
http://www.XXX.com//@内蒙古@文件@CGCC@245*190430*674450@XXX有限公司@2.517@133750.0@ECT0018222@5605314200@
作者: terse 时间: 2015-9-23 22:57
对于大数据 效率肯定不理想- @echo off&setlocal enabledelayedexpansion
- >new_aa.txt (for /f "delims=" %%i in (aa.txt) do (
- set str=%%i
- echo %%i
- for /f "delims=" %%j in ("!str:@=\!\@\..") do (
- for /f "delims=" %%k in ('findstr /ismc:"%%~nj" c:\aa\*.txt') do (
- type "%%k"
- )
- )
- ))
- pause
复制代码
作者: CrLf 时间: 2015-9-23 23:30
反复检索 900+MB 的文件,很难快起来
楼主AA子目录下的那些文件的内容有没有什么规律?比如固定位置,或者有固定前后缀
先把可能存在关键词的部分和对应文件路径提取出来,再两相匹配,这样也许会快些
作者: necnec1 时间: 2015-9-24 00:11
回复 4# terse
回复terse版主 你的批处理 最后一行 没有换行 导致跟第二组数据的开始 混在一起了 呈现这么一种效果
http://www.XXX.com/@北京@文件@CT1000@77*12535*85688@XXX有限公司@1.284@13760.0@ECT0011615@5503013330@
sdfefsf5503013330f3fsf
dsa234235503013330fdsfdsfhttp://www.XXX.com/@上海@文件@EGA20@1332*244170*644280@XXX有限公司@1.284@13760.0@ECT0011615@AE03013340@
www.asef.comAE03013340fdsfdsf
作者: aa77dd@163.com 时间: 2015-9-24 00:18
本帖最后由 aa77dd@163.com 于 2015-9-24 00:20 编辑
回复 6# necnec1
你在他代码的第 7 行后面可以加上一个 echo;
觉得耗时更大的原因在于文件的数量, 检索时要反复的打开和关闭文件, 这会很耗时, 如果同样大的数据都在数据库里, 效率会高得多
作者: necnec1 时间: 2015-9-24 00:43
回复 5# CrLf
回复 5# CrLf
回复CrLf版主 如果我吧所有的TXT文本 合并成一个900M的TXT
举例来说 下面是AA.TXT
http://www.XXX.com/@北京@文件@CT1000@77*12535*85688@XXX有限公司@1.284@13760.0@ECT0011615@5503013330@
http://www.XXX.com/@上海@文件@EGA20@1332*244170*644280@XXX有限公司@1.284@13760.0@ECT0011615@AE03013340@
http://www.XXX.com//@内蒙古@文件@CGCC@245*190430*674450@XXX有限公司@2.517@133750.0@ECT0018222@5605314200@
这是BB.TXT 900M的数据
14131370@TCAC [email]DFE@T7G0345444_ABCE1403240013200.txt[/email]@ 14365184010 5503013330 3243 DFSFE 720 5 13 12 9 47 152 297 54 64 32 32
14131370@TCAC [email]TTT@AEG0342344_LOKIJ1403343313200.txt[/email]@ 14363134310 3243 3243 CCFEF 720 5 13 13 9 47 145 297 50 64 32 33
14131310@TCAC [email]AJUE@T7G0343954_ABCE1403240013200.txt[/email]@ 14365485070 3243 3243 FDSFDF 720 5 23 12 9 47 144 297 52 64 32 32
41e31a370@EEAB2 [email]THF@T7G0345334_ABCE1403240013200.txt[/email]@ 14069188010 AE03013340 3243 CCFEF 720 5 13 12 9 47 143 297 10 64 32 32
这2组数据 AA.TXT里的是 5503013330 AE03013340 5605314200 这3个关键数据可以保证在行尾由2个@固定
BB.TXT 重要的是14131370 14131310 41e31a370 这3个关键数据我可以保证他们在行首出现 并由一个@结束 并且他们都分布在一起 不管有多少行 这样会不会减少搜索时间?
我希望达到的效果是 由AA.TXT里先找出5503013330 然后在BB.TXT里发现了5503013330 尽管5503013330只出现了一次 但是行首的14131370却出现了2次 这2组数据我都要
最后呈现的效果是这样
http://www.XXX.com/@北京@文件@CT1000@77*12535*85688@XXX有限公司@1.284@13760.0@ECT0011615@5503013330@
14131370@TCAC [email]DFE@T7G0345444_ABCE1403240013200.txt[/email]@ 14365184010 5503013330 3243 DFSFE 720 5 13 12 9 47 152 297 54 64 32 32
14131370@TCAC [email]TTT@AEG0342344_LOKIJ1403343313200.txt[/email]@ 14363134310 3243 3243 CCFEF 720 5 13 13 9 47 145 297 50 64 32 33
http://www.XXX.com/@上海@文件@EGA20@1332*244170*644280@XXX有限公司@1.284@13760.0@ECT0011615@AE03013340@
41e31a370@EEAB2 [email]THF@T7G0345334_ABCE1403240013200.txt[/email]@ 14069188010 AE03013340 3243 CCFEF 720 5 13 12 9 47 143 297 10 64 32 32
http://www.XXX.com//@内蒙古@文件@CGCC@245*190430*674450@XXX有限公司@2.517@133750.0@ECT0018222@5605314200@
第一组出现2次 第二组出现一次 第三组没有符合的 就OK了
作者: terse 时间: 2015-9-24 01:37
本帖最后由 terse 于 2015-9-24 01:41 编辑
WIN7系统 可以试下POWSHELL 的 Select-String 看是否提高点效率
另: 再看你 8楼的意思 还要再次搜索
最好把意图一次性表述清楚
作者: CrLf 时间: 2015-9-24 04:13
8楼的例子和顶楼的例子格式完全不一样!!什么鬼!!
楼主你还是把两个文件各取一小部分扔网盘吧,不然我们写得很累,你拿到的代码针对性还不强
作者: 34205 时间: 2015-9-27 12:31
建议楼主理清一下思路,看了大大们的回复他们很想操刀大干,但是好像又不对你说的,所以毕竟你最了解要什么,说清楚了才能得到最关键的答案哈
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |