标题: [文本处理] [已解决]批处理从一行字符串中根据特殊标识提出多个指定字符串? [打印本页]
作者: xlkindy 时间: 2010-3-24 16:24 标题: [已解决]批处理从一行字符串中根据特殊标识提出多个指定字符串?
如一文本文件内容如下:
<提取行>AAAAAAA(字符串1)BBBBBBBB(字符串2)CCCCCC(字符串3)
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
<提取行>AAAAAAA(字符串4)BBBBBBBB(字符串5)CCCCCC
uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
........
提取后效果:
字符串1,字符串2,字符串3
字符串4,字符串5
........
即:对文本文件中带<提取行>的行中将()中的字符串提出来,有多少提多少,每个字符串用“,”间隔,最后一个不需要用“,”,其余不带<提取行>的内容就清除掉。
[ 本帖最后由 xlkindy 于 2010-3-26 09:59 编辑 ]
作者: bat007 时间: 2010-3-24 17:55
- gawk "/<提取行>/{n=split($0,a,\")\");for(i=1;i<n-1;i++)printf \"%s(\",a[i];print a[i]}" a.txt | gawk -F( "{for(i=2;i<NF;i+=2)printf \"%s;\",$i;print $i}" >b.txt
复制代码
作者: xlkindy 时间: 2010-3-24 18:11
抱歉,能提供gawk的下载链接吗?
作者: xlkindy 时间: 2010-3-24 18:15
自己找到了,谢谢。
另外,有无其它方法,gawk不太熟悉,可否用for+sed实现呢?
作者: xlkindy 时间: 2010-3-24 18:18 标题: 回复 2楼 的帖子
这个方法试了一下,貌似进入死循环了。
作者: bat007 时间: 2010-3-24 21:14 标题: 回复 5楼 的帖子
C:\Test>type a.txt
<提取行>AAAAAAA(字符串1)BBBBBBBB(字符串2)CCCCCC(字符串3)
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
<提取行>AAAAAAA(字符串4)BBBBBBBB(字符串5)CCCCCC
uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu- gawk "/<提取行>/{n=split($0,a,\")\");for(i=1;i<n-1;i++)printf \"%s(\",a[i];print a[i]}" a.txt | gawk -F( "{for(i=2;i<NF;i+=2)printf \"%s;\",$i;print $i}" >b.txt
复制代码
C:\Test>type b.txt
字符串1;字符串2;字符串3
字符串4;字符串5
作者: sgaizxt001 时间: 2010-3-25 09:27
gwak是包含的有C语言?
作者: bat007 时间: 2010-3-25 13:04 标题: 回复 7楼 的帖子
gawk是用C语言编写的,不是包含和被包含的关系,有些语法比较像而已。
作者: lvsehuaxue 时间: 2011-5-16 20:45
批处理这样不知行否?- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('findstr "提取行" a.txt') do (
- set "v=%%i"
- set "v=!v:(= !"
- set "v=!v:)= !"
- set "v=!v:<=!"
- set "v=!v:>=!"
- for %%i in (!v!) do (
- set /a n=n%%2+1
- if !n! == 2 set str=!str!%%i,
- )
- echo !str:~,-1!
- set str=
- )
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |