Board logo

标题: [文本处理] 批处理如何提取txt文本含有指定关键字/字符串的行的第1列/第一列内容 [打印本页]

作者: seekbook    时间: 2016-7-16 18:31     标题: 批处理如何提取txt文本含有指定关键字/字符串的行的第1列/第一列内容

本帖最后由 pcl_test 于 2016-7-17 01:17 编辑

我写了一个查询的批处理,用finstr将含有的关键字整行输出,目前的代码是按照查询的关键字整行输出的,但是不符合我的要求,我想输出后只保存第1列的数字格式,后面的几列不需要,求大神指点修正代码,小弟非常感谢
代码如下
@echo
findstr "浙江" "目标文件.txt">浙江.txt
findstr "江西" "目标文件.txt">江西.txt
findstr "福建" "目标文件.txt">福建.txt


以下是被查的目标文件名称如下,其中列和列之间是TAB的制表符隔开的
目标文件.txt
444106466        浙江        第3列        第4列        第5列
444106467        江西        第3列        第4列        第5列
444106468        福建        第3列        第4列        第5列
444106469        金华        第3列        第4列        第5列
444126468        杭州        第3列        第4列        第5列

我想输出的文本如下,只输出第1列
浙江.txt
444106466


江西.txt
444106467

福建
444106467
作者: ygqiang    时间: 2016-7-16 19:25

本帖最后由 ygqiang 于 2016-7-16 19:29 编辑

回复 1# seekbook


for /f "tokens=1" %%a in (浙江.txt) do echo %%a>>浙江-new.txt
作者: pcl_test    时间: 2016-7-16 19:30

本帖最后由 pcl_test 于 2016-7-16 19:31 编辑

http://www.bathome.net/thread-2189-1-1.html
没明白是要分别输出到各自文本还是一起输出到同一个文本,自己看着修改
  1. @echo off
  2. for /f "tokens=1,2" %%a in ('type "查询成功.txt"') do (
  3.     if "%%b" equ "浙江" >>"$浙江.txt" echo;%%a
  4.     if "%%b" equ "江西" >>"$江西.txt" echo;%%a
  5.     if "%%b" equ "福建" >>"$福建.txt" echo;%%a
  6. )
  7. ::注释copy /b $*.txt "合并.txt"
  8. pause
复制代码

作者: seekbook    时间: 2016-7-16 19:35

回复 3# pcl_test


    你好谢谢,是要分别输出各自的文档的,我不大会哈,麻烦大侠再次修正谢谢啊
作者: seekbook    时间: 2016-7-16 19:36

回复 2# ygqiang


    你好,不是这样的,是分别输出我指定的关键字的文本.txt 我再改下哈,要不然朋友们都不大理解
作者: pcl_test    时间: 2016-7-16 19:53

回复 4# seekbook

原本就是分别输出,如果是输出到同个文本,把注释符去掉
作者: seekbook    时间: 2016-7-16 20:48

回复 6# pcl_test


  老大,刚才测试了好像还是不行,双击批处理时,显示窗口,但没有输出文件,我把查询成功这个文档的部分内容给传上来,为什么取不出列呢,查询的关键字不是在第三列,也有可能在后面的,我之前的思路是包含这一行的给输出,还得再麻烦您给测试下,谢谢
作者: pcl_test    时间: 2016-7-16 21:31

本帖最后由 pcl_test 于 2016-7-16 23:32 编辑

回复 7# seekbook

顶楼的样本跟实际不同好么
3L改一处 tokens=1,8
作者: pcl_test    时间: 2016-7-16 21:40

本帖最后由 pcl_test 于 2016-7-18 13:54 编辑
  1. //&cls&cscript -nologo -e:jscript "%~f0"<"查询成功.txt"&pause&exit
  2. var fso = new ActiveXObject('Scripting.FileSystemObject'), a={};
  3. while(!WSH.StdIn.AtEndOfStream){
  4.     var line = WSH.StdIn.ReadLine();
  5.     var m = line.match(/\s(浙江|江西|福建)\s/);
  6.     if(m){
  7.         var str = line.split(/\s+/);
  8.         a[m[1]]?a[m[1]]+=str[0]+'\r\n':a[m[1]]=str[0]+'\r\n';
  9.     }
  10. }
  11. for(var b in a)fso.OpenTextFile(b+'.txt', 2, true).Write(a[b])
  12. WSH.Echo('Done');
复制代码

作者: seekbook    时间: 2016-7-16 22:50

回复 9# pcl_test


    谢谢老大,太感谢了,程序可用,重写了一次代码,辛苦了
作者: GNU    时间: 2016-7-18 13:28

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

作者: pcl_test    时间: 2016-7-18 14:20

  1. gawk "match($0,/\s(浙江|江西|福建)\s/,a){print $1>a[1]\".txt\"}" "查询成功.txt"
复制代码





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