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

[文本处理] 批处理如何提取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

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

TOP

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

TOP

回复 9# pcl_test


    谢谢老大,太感谢了,程序可用,重写了一次代码,辛苦了

TOP

本帖最后由 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');
复制代码

TOP

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

回复 7# seekbook

顶楼的样本跟实际不同好么
3L改一处 tokens=1,8

TOP

回复 6# pcl_test


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

TOP

回复 4# seekbook

原本就是分别输出,如果是输出到同个文本,把注释符去掉

TOP

回复 2# ygqiang


    你好,不是这样的,是分别输出我指定的关键字的文本.txt 我再改下哈,要不然朋友们都不大理解

TOP

回复 3# pcl_test


    你好谢谢,是要分别输出各自的文档的,我不大会哈,麻烦大侠再次修正谢谢啊

TOP

本帖最后由 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
复制代码

TOP

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

回复 1# seekbook


for /f "tokens=1" %%a in (浙江.txt) do echo %%a>>浙江-new.txt

TOP

返回列表