[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 如何在文本里每一行指定字符串之后的特定内容两边添加指定字符并提取该内容添加到行首

[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

这个[email] 不是我要的 帖子发上去就有 怎么编辑都去不掉 我也不知道原因

TOP

  1. @echo off
  2. (for /f "tokens=1,2,*" %%i in ('type "1.txt"') do (
  3.     echo %%j@%%i (%%j) %%k
  4. ))>2.txt
复制代码
1

评分人数

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 3# Batcher


    回Batcher版主 忘了说  我这个文本有几百M大  好像这个批处理速度好慢啊  能不能稍微改进一下

TOP

回复 4# necnec1
  1. @echo off
  2. 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
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 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的

我的数据 就是符号-----左边的 变化很大   经常有空格或者是一些特殊的符号

TOP

。。。 。。。
一会儿说点儿,一会儿说点儿。
人生是一部书/只有这一页最温暖/读懂它的时候/我们在远方流泪...

TOP

听说VBS比JS快好多,然而还不会VBS
像这种好几百兆的文本处理,VBS是不是快好多呢。路过的来一个VBS。

测试数据——————生成数据307M
  1. @if(0)==(0) echo off& cscript -nologo -e:jscript "%~f0"&pause&exit /b&@end
  2. var s1 = "TCACDFE-----T7G0345444_ABCE1403240013200.txt 14365184  3243 3243 DFSFE 720 5 13 12 9 47 152 297 54 64 32 32\r\n";
  3. s1 += "TCACTTT-----AEG0342344_LOKIJ1403343313200.txt CE363134  3243 3243 CCFEF 720 5 13 13 9 47 145 297 50 64 32 33\r\n";
  4. s1 += "TCACAJUE-----T7G0343954_ABCE1403240013200.txt 14036H  3243 3243 FDSFDF 720 5 23 12 9 47 144 297 52 64 32 32\r\n";
  5. 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";
  6. var fso = new ActiveXObject("Scripting.FileSystemObject");
  7. f = fso.CreateTextFile("1.txt");
  8. for(var i=0;i<700000;i++){
  9. f.WriteLine(s1);
  10. }
  11. f.Close();
复制代码
JS处理的话--6核CPU、6G内存,80秒
  1. @if(0)==(0) echo off& cscript -nologo -e:jscript "%~f0"&pause&exit /b&@end
  2. var fso = new ActiveXObject("Scripting.FileSystemObject");
  3. var f = fso.OpenTextFile("1.txt",1);
  4. rf = fso.CreateTextFile("2.txt", true);
  5. var r = /^(.*\.txt\s+)(\w+)(.*)$/;
  6. r.compile(r);
  7. while(!f.atEndOfStream){
  8. var line=f.ReadLine();
  9. line.replace(r, function($0,$1,$2,$3){
  10. rf.WriteLine($2+"@"+$1+"("+$2+")"+$3);
  11. });
  12. }
  13. f.close();
  14. rf.close();
复制代码
1

评分人数

人生是一部书/只有这一页最温暖/读懂它的时候/我们在远方流泪...

TOP

很好很强大 谢谢Batcher  回家路上

TOP

返回列表