Board logo

标题: [文本处理] 批处理将文本中每行第一个指定字符前的字符串相同的行输出到以该字符串命名的文本里 [打印本页]

作者: necnec1    时间: 2015-5-28 21:06     标题: 批处理将文本中每行第一个指定字符前的字符串相同的行输出到以该字符串命名的文本里

本帖最后由 pcl_test 于 2016-10-14 13:46 编辑

14131370@TCAC [email]DFE@T7G0345444_ABCE1403240013200.txt[/email]@ 14365184010  3243 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
4131370@EEAB2 [email]THF@T7G0345334_ABCE1403240013200.txt[/email]@ 14069188010  3243 3243 CCFEF 720 5 13 12 9 47 143 297 10 64 32 32

第一个@前面的数字 做为关键字  很明显结果是 14131370  14131310   4131370
然后针对这3个关键字 建立3个新文本文件  文件名就取上面这3个数   然后把关键字相同的行剪切到各自对应的文本文件里

里面需要注意的是关键字的完整匹配 14131370和4131370   有可能会混淆

文件有500多万行 请会的朋友帮帮忙
作者: pcl_test    时间: 2015-5-28 22:22

  1. @echo off
  2. ::gawk下载地址http://batch-cn.qiniudn.com/tool/gawk.exe
  3. gawk -F "@" "{print $0>>$1\".txt\"}" "测试.txt"
  4. echo;完成
  5. pause
复制代码

作者: terse    时间: 2015-5-29 14:02

纯P
  1. @echo off
  2. for /f "tokens=1* delims=@" %%i in (测试.txt) do (
  3.     >>%%i.txt echo;%%i@%%j
  4. )
  5. pause
复制代码
bat+js
  1. @if(0)==(0) echo off & cscript -NoLogo -E:JScript %0 <测试.txt & pause & exit & @end
  2. var fso = new ActiveXObject("Scripting.FileSystemObject")
  3. var re = /(.*?)@.*/;
  4. while (!WScript.StdIn.AtEndOfStream){
  5.     var str = WScript.StdIn.ReadLine();
  6.     var filename = str.replace(re,'$1') + ".txt"
  7.     var f = fso.OpenTextFile(filename,8,true);
  8.     f.WriteLine(str);
  9.     f.Close()
  10. }
复制代码

作者: CrLf    时间: 2015-7-9 01:19

回复 2# pcl_test


    print $0 还可简写成 print
作者: pcl_test    时间: 2015-7-9 09:59

回复 5# CrLf


    感谢指点




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2