标题: [文本处理] [已解决]批处理提取同时含有多个关键词的行并按行排序输出 [打印本页]
作者: wh1234567 时间: 2012-6-14 20:41 标题: [已解决]批处理提取同时含有多个关键词的行并按行排序输出
本帖最后由 CrLf 于 2012-6-16 01:32 编辑
例如:提取行中同时含有多个关键词的行并按行排序输出
关键词:"6.0 ,无法 蔬菜"
关键词与关键词之间用空格隔开
目前学生营养餐口味还无法满足中小学生的多样化需求。由于学生午餐fghfhf
66.0采用的是大锅烹调、提前分装的形式,很多蔬菜在到 达学生餐桌旁时,已经色香味尽失,无法被孩子们接受。2324
因此,不易变色变味的茄果类、菌菇类蔬菜和浅色蔬菜,应在学生午餐中34hff适量增加。
采 用的,无法菇类、216.0.8提前分装的蔬菜 12
输出结果:
66.0采用的是大锅烹调、提前分装的形式,很多蔬菜在到 达学生餐桌旁时,已经色香味尽失,无法被孩子们接受。2324
采 用的,无法菇类、216.0.8提前分装的蔬菜 12
作者: weichenxiehou 时间: 2012-6-14 21:13
- findstr "6\.0 无法.*蔬菜" a.txt|sort
复制代码
作者: poter 时间: 2012-6-14 21:21
回复 2# weichenxiehou
6\.0 无法.*蔬菜
该怎么理解呢? 三个关键词中间的那些特殊符号代表什么?
作者: yangfengoo 时间: 2012-6-14 21:34
匹配任意字符
作者: CrLf 时间: 2012-6-14 21:44
回复 3# poter
见顶楼附图:http://bbs.bathome.net/viewthread.php?tid=14682
作者: wh1234567 时间: 2012-6-14 22:05
本帖最后由 wh1234567 于 2012-6-14 22:33 编辑
回复 2# weichenxiehou
首先感谢你的回复,可能你没理解我的意思,文本里的行很多,大约25MB,关键词2边不一定是什么字符,现在是只提取同时包含设定的几个关键词的行,并输出
也就是行里同时包含这几个关键词时才输出该整行,将符合条件的行全部输出,不是只输出一行
作者: wh1234567 时间: 2012-6-14 22:08
回复 4# yangfengoo
不是匹配任意一个关键词,是同时符合
作者: CrLf 时间: 2012-6-14 22:24
回复 7# wh1234567
那你为什么不事先说明白呢?让别人自己归纳总是费时费力还容易出错的,楼主应该尽可能将已知规律表达清楚。
作者: apang 时间: 2012-6-14 23:08
这样行不?- @echo off
- (for /f "delims=" %%a in (a.txt) do (
- set "str=%%a"
- setlocal enabledelayedexpansion
- for %%b in (6.0 无法 蔬菜) do (
- if "!str:%%b=!"=="!str!" set nok=1
- )
- if !nok! neq 1 echo !str!
- endlocal
- ))>b.txt
复制代码
作者: CrLf 时间: 2012-6-14 23:22
- type *.txt 2>nul|find "6.0"|find ",无法"|find "蔬菜"|sort
复制代码
作者: apang 时间: 2012-6-14 23:43
回复 10# CrLf
版主V5,又学一招。
作者: weichenxiehou 时间: 2012-6-14 23:49
回复 6# wh1234567
哦,我是按照你顶楼那个输出结果猜测的规律,如果要实现“与”的关系,Crlf版主的多重管道是一解,代码简洁,就是不知道会不会因为文本太大管道太多拉低效率;apang中校的字符串替换也是一种比较好的办法吧,效率应该要高一点儿,算多写代码的回报吧;用gawk其实也可以试试:- gawk "/6\.0/&&/,无法/&&/蔬菜/{print|\"sort\">\"new.txt\"}" a.txt
复制代码
感觉gawk的中文支持不是很好,可能会出问题,也只是为了比较形象地表达“与”的关系而已,估计花在RE匹配和field splitting上的时间也不会少。
作者: wh1234567 时间: 2012-6-15 01:21
本帖最后由 wh1234567 于 2012-6-15 01:23 编辑
版主和weichenxiehou 的代码很简洁,估计处理速度也很快吧,可惜的是我不喜欢用第三方命令程序,设置关键词也不是很方便很容易不小心出错的,我喜欢例如这样的格式(方便集中设置,无需额外程序):
set wenben=数据.txt
set guanjianci=小学 作文
下面是命令...
在此还是很感谢你们几位坛友们,辛苦了......
作者: wh1234567 时间: 2012-6-15 01:29
本帖最后由 wh1234567 于 2012-6-15 01:41 编辑
回复 9# apang
我想将输出的处理过程显示在窗口上,不知道咋加代码呢,方便看进度
另外想将 关键词+输出的总行数+当前时间 命名为输出的文件名,不知道是不是麻烦了点?
作者: yangfengoo 时间: 2012-6-15 09:47
回复 7# wh1234567
我是解释“三个关键词中间的那些特殊符号代表什么”
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |