标题: [文本处理] [已解决]批处理怎样筛选文本文件的内容? [打印本页]
作者: hucuibai 时间: 2011-4-12 11:36 标题: [已解决]批处理怎样筛选文本文件的内容?
文件内容在附件里面 我截取了其中一部分,我要把
"2011-3-29 0:0:0",4295267863,2,37,6,7747,5946,113006,1,116957973479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
"2011-3-29 0:0:0",4295267863,3,37,6,7747,5946,3152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
这种格式的第三部分相同的内容提出来重定向到另外一个以第三部分命名的文件比如上面两行的就是分别提取到2.txt和3.txt
作者: hucuibai 时间: 2011-4-12 11:39
- @echo off
- for /l %%a in (0,1,100) do (
- for /f "tokens=1,2,3,* delims=," %%b in (temp.txt) do (
- if %%a==%%d (echo %%b,%%c,%%d,%%e>>%%a.txt )
- )
- )
复制代码
做了一个这样的,但是效率非常之低,因为文件很大,有几百M
我用findstr “,.*,第三部分的数字,.*,*,”这个命令效率的快点,但是查出来的大部分都是对的,有些是错的,不知道是不是我写错了,求高人指点!!
作者: namejm 时间: 2011-4-12 12:17
本帖最后由 namejm 于 2011-4-12 12:19 编辑
几百M的大文件,批处理拿不下
不知道sed之类的能不能打开那么大的文件
另外,请你详细描述第3部分的字符串的组成规律
作者: asnahu 时间: 2011-4-12 12:37
"2011-3-29 0:0:0",4295267863,2,37,6,7747,5946,113006,1,116957973479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
"2011-3-29 0:0:0",4295267863,3,37,6,7747,5946,3152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
红色的是第三部分?
作者: hucuibai 时间: 2011-4-12 12:46
4# asnahu
对的,就是第三部分你指的红色部分,这个部分相同的内容提出来重定向
作者: hucuibai 时间: 2011-4-12 12:51
3# namejm
文件有四百多M,我用sort打开另存为ansi文件就只有两百多M了,源文件是unicode文件,sed应该可以打开吧,第三部分的规律是有 但是这规律也有点乱,分几段,从1到36然后是从50到70,80到83,最后还有一个106,就是这些数字,所以也没什么规律可言了,
作者: namejm 时间: 2011-4-12 13:28
第三部分是纯数字,这就是规律啊
能具体到什么程度就到什么程度,不要觉得那些字符串不确定就认为没规律
想不到批处理还是可以打开大文件的啊
那就好办了
试试下面这个代码吧,这个代码是以追加的方式写入文件的,所以必须保证在运行它之前把当前目录下以纯数字命名的txt文件内容清空:
- @echo off
- for /f "delims=, tokens=1-3*" %%i in (test.txt) do (
- (echo %%i,%%j,%%k,%%l)>>%%k.txt
- )
- pause
复制代码
作者: CrLf 时间: 2011-4-12 13:35
本帖最后由 zm900612 于 2011-4-12 13:37 编辑
看错题意,当我没说...
作者: hucuibai 时间: 2011-4-12 13:47
7# namejm
你的这个可以,比我的那个效率高多了,嘿嘿!!但是时间还是用了蛮久!还有没有更高效的!
作者: asnahu 时间: 2011-4-12 13:48
- gawk -F, "{a[$0]=$3;b[$3]=$3}END{for(i in a)for(j in b)if(b[j]==a[i])print i >> b[j]\".txt\"}" item
复制代码
作者: hucuibai 时间: 2011-4-12 14:05
10# asnahu
高,效率高多了!正在学这个命令,你这东西太长,看不大懂!
作者: Batcher 时间: 2011-4-12 20:38
11# hucuibai
那是gawk数组的最基本用法了,可以找几个相关的教程看看。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |