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

[文本处理] [已解决]批处理从一行字符串中根据特殊标识提出多个指定字符串?

如一文本文件内容如下:
<提取行>AAAAAAA(字符串1)BBBBBBBB(字符串2)CCCCCC(字符串3)
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
<提取行>AAAAAAA(字符串4)BBBBBBBB(字符串5)CCCCCC
uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
........

提取后效果:
字符串1,字符串2,字符串3
字符串4,字符串5
........

即:对文本文件中带<提取行>的行中将()中的字符串提出来,有多少提多少,每个字符串用“,”间隔,最后一个不需要用“,”,其余不带<提取行>的内容就清除掉。

[ 本帖最后由 xlkindy 于 2010-3-26 09:59 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

  1. 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
复制代码
1

评分人数

TOP

抱歉,能提供gawk的下载链接吗?

TOP

自己找到了,谢谢。
另外,有无其它方法,gawk不太熟悉,可否用for+sed实现呢?

TOP

回复 2楼 的帖子

这个方法试了一下,貌似进入死循环了。

TOP

回复 5楼 的帖子

C:\Test>type a.txt
<提取行>AAAAAAA(字符串1)BBBBBBBB(字符串2)CCCCCC(字符串3)
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
<提取行>AAAAAAA(字符串4)BBBBBBBB(字符串5)CCCCCC
uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
  1. 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

TOP

gwak是包含的有C语言?

TOP

回复 7楼 的帖子

gawk是用C语言编写的,不是包含和被包含的关系,有些语法比较像而已。

TOP

批处理这样不知行否?
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('findstr "提取行" a.txt') do (
  3.     set "v=%%i"
  4.     set "v=!v:(= !"
  5.     set "v=!v:)= !"
  6.     set "v=!v:<=!"
  7.     set "v=!v:>=!"
  8.     for %%i in (!v!) do (
  9.         set /a n=n%%2+1
  10.         if !n! == 2 set str=!str!%%i,
  11.      )
  12.      echo !str:~,-1!
  13.      set str=
  14. )
  15. pause
复制代码

TOP

返回列表