标题: [文本处理] 如何在文本里每一行指定字符串之后的特定内容两边添加指定字符并提取该内容添加到行首 [打印本页]
作者: necnec1 时间: 2015-9-22 14:03 标题: 如何在文本里每一行指定字符串之后的特定内容两边添加指定字符并提取该内容添加到行首
[i=s] 本帖最后由 pcl_test 于 2016-11-19 21:57 编辑 [/i]
TCACDFE-----T7G0345444_ABCE1403240013200.txt 14365184 3243 3243 DFSFE 720 5 13 12 9 47 152 297 54 64 32 32
TCACTTT-----AEG0342344_LOKIJ1403343313200.txt CE363134 3243 3243 CCFEF 720 5 13 13 9 47 145 297 50 64 32 33
TCACAJUE-----T7G0343954_ABCE1403240013200.txt 14036H 3243 3243 FDSFDF 720 5 23 12 9 47 144 297 52 64 32 32
EAB2THF-----T7G0345334_ABCE1403240013200.txt 14069188010 3243 3243 CCFEF 720 5 13 12 9 47 143 297 10 64 32 32
每一行文本 .TXT后面紧跟那组数字是关键数字 我需要将他们用()包起来 然后将数字放到行首用@分隔就行了
最后的结果是这样
14365184@TCACDFE-----T7G0345444_ABCE1403240013200.txt (14365184) 3243 3243 DFSFE 720 5 13 12 9 47 152 297 54 64 32 32
CE363134@TCACTTT-----AEG0342344_LOKIJ1403343313200.txt (CE363134) 3243 3243 CCFEF 720 5 13 13 9 47 145 297 50 64 32 33
14036H@TCACAJUE-----T7G0343954_ABCE1403240013200.txt (14036H) 3243 3243 FDSFDF 720 5 23 12 9 47 144 297 52 64 32 32
14069188010@EAB2THF-----T7G0345334_ABCE1403240013200.txt (14069188010) 3243 3243 CCFEF 720 5 13 12 9 47 143 297 10 64 32 32
作者: necnec1 时间: 2015-9-22 14:07
这个[email] 不是我要的 帖子发上去就有 怎么编辑都去不掉 我也不知道原因
作者: Batcher 时间: 2015-9-22 14:14
- @echo off
- (for /f "tokens=1,2,*" %%i in ('type "1.txt"') do (
- echo %%j@%%i (%%j) %%k
- ))>2.txt
复制代码
作者: necnec1 时间: 2015-9-22 14:27
回复 3# Batcher
回Batcher版主 忘了说 我这个文本有几百M大 好像这个批处理速度好慢啊 能不能稍微改进一下
作者: Batcher 时间: 2015-9-22 15:01
回复 4# necnec1 - @echo off
- gawk "{printf \"%%s@%%s (%%s) \",$2,$1,$2;for(i=3;i<NF;i++)printf \"%%s \",$i;print $i}" 1.txt > 2.txt
复制代码
gawk.exe下载地址:
http://www.bathome.net/s/tool/index.html?key=gawk
作者: necnec1 时间: 2015-9-22 15:52
回复 5# Batcher
回复版主 数据执行过程中 还是有错误
TCACDFE-----T7G0345444_ABCE1403240013200.txt 14365184 3243 3243 DFSFE 720 5 13 12 9 47 152 297 54 64 32 32
TCACTTT-----AEG0342344_LOKIJ1403343313200.txt CE363134 3243 3243 CCFEF 720 5 13 13 9 47 145 297 50 64 32 33
TCACAJUE-----T7G0343954_ABCE1403240013200.txt 14036H 3243 3243 FDSFDF 720 5 23 12 9 47 144 297 52 64 32 32
CCE T2210 SSECS-----T7G0345334_ABCE1403240013200.txt 14069188010 3243 3243 CCFEF 720 5 13 12 9 47 143 297 10 64 32 32
内容如上 我把最后一个-----的前面改成CCE T2210 SSECS 最后执行的结果变成
T2210@CCE (T2210) SSECS-----T7G0345334_ABCE1403240013200.txt 14069188010 3243 3243 CCFEF 720 5 13 12 9 47 143 297 10 64 32 32
本身应该是14069188010的
我的数据 就是符号-----左边的 变化很大 经常有空格或者是一些特殊的符号
作者: 回家路上 时间: 2015-9-22 16:01
。。。 。。。
一会儿说点儿,一会儿说点儿。
作者: 回家路上 时间: 2015-9-23 09:49
听说VBS比JS快好多,然而还不会VBS
像这种好几百兆的文本处理,VBS是不是快好多呢。路过的来一个VBS。
测试数据——————生成数据307M- @if(0)==(0) echo off& cscript -nologo -e:jscript "%~f0"&pause&exit /b&@end
-
- var s1 = "TCACDFE-----T7G0345444_ABCE1403240013200.txt 14365184 3243 3243 DFSFE 720 5 13 12 9 47 152 297 54 64 32 32\r\n";
- s1 += "TCACTTT-----AEG0342344_LOKIJ1403343313200.txt CE363134 3243 3243 CCFEF 720 5 13 13 9 47 145 297 50 64 32 33\r\n";
- s1 += "TCACAJUE-----T7G0343954_ABCE1403240013200.txt 14036H 3243 3243 FDSFDF 720 5 23 12 9 47 144 297 52 64 32 32\r\n";
- s1 += "CCE T2210 SSECS-----T7G0345334_ABCE1403240013200.txt 14069188010 3243 3243 CCFEF 720 5 13 12 9 47 143 297 10 64 32 32\r\n";
-
- var fso = new ActiveXObject("Scripting.FileSystemObject");
- f = fso.CreateTextFile("1.txt");
- for(var i=0;i<700000;i++){
- f.WriteLine(s1);
- }
- f.Close();
复制代码
JS处理的话--6核CPU、6G内存,80秒- @if(0)==(0) echo off& cscript -nologo -e:jscript "%~f0"&pause&exit /b&@end
-
- var fso = new ActiveXObject("Scripting.FileSystemObject");
- var f = fso.OpenTextFile("1.txt",1);
- rf = fso.CreateTextFile("2.txt", true);
- var r = /^(.*\.txt\s+)(\w+)(.*)$/;
- r.compile(r);
- while(!f.atEndOfStream){
- var line=f.ReadLine();
- line.replace(r, function($0,$1,$2,$3){
- rf.WriteLine($2+"@"+$1+"("+$2+")"+$3);
- });
- }
- f.close();
- rf.close();
复制代码
作者: necnec1 时间: 2015-9-23 11:04
很好很强大 谢谢Batcher 回家路上
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |