标题: [文本处理] 批处理如何提取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
没明白是要分别输出到各自文本还是一起输出到同一个文本,自己看着修改- @echo off
- for /f "tokens=1,2" %%a in ('type "查询成功.txt"') do (
- if "%%b" equ "浙江" >>"$浙江.txt" echo;%%a
- if "%%b" equ "江西" >>"$江西.txt" echo;%%a
- if "%%b" equ "福建" >>"$福建.txt" echo;%%a
- )
- ::注释copy /b $*.txt "合并.txt"
- 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 编辑
- //&cls&cscript -nologo -e:jscript "%~f0"<"查询成功.txt"&pause&exit
- var fso = new ActiveXObject('Scripting.FileSystemObject'), a={};
- while(!WSH.StdIn.AtEndOfStream){
- var line = WSH.StdIn.ReadLine();
- var m = line.match(/\s(浙江|江西|福建)\s/);
- if(m){
- var str = line.split(/\s+/);
- a[m[1]]?a[m[1]]+=str[0]+'\r\n':a[m[1]]=str[0]+'\r\n';
- }
- }
- for(var b in a)fso.OpenTextFile(b+'.txt', 2, true).Write(a[b])
- WSH.Echo('Done');
复制代码
作者: seekbook 时间: 2016-7-16 22:50
回复 9# pcl_test
谢谢老大,太感谢了,程序可用,重写了一次代码,辛苦了
作者: GNU 时间: 2016-7-18 13:28
- @echo off
- for /f "tokens=1,8" %%i in ('type "查询成功.txt"') do (
- >>"%%j.txt" echo,%%i
- )
复制代码
作者: pcl_test 时间: 2016-7-18 14:20
- gawk "match($0,/\s(浙江|江西|福建)\s/,a){print $1>a[1]\".txt\"}" "查询成功.txt"
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |