找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24893|回复: 8

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

[复制链接]
发表于 2010-3-24 16:24:53 | 显示全部楼层 |阅读模式
如一文本文件内容如下:
<提取行>AAAAAAA(字符串1)BBBBBBBB(字符串2)CCCCCC(字符串3)
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
<提取行>AAAAAAA(字符串4)BBBBBBBB(字符串5)CCCCCC
uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
........

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

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

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

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢主动给标题标注[已解决]字样

查看全部评分

发表于 2010-3-24 17:55:14 | 显示全部楼层
  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技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2010-3-24 18:11:41 | 显示全部楼层
抱歉,能提供gawk的下载链接吗?
 楼主| 发表于 2010-3-24 18:15:20 | 显示全部楼层
自己找到了,谢谢。
另外,有无其它方法,gawk不太熟悉,可否用for+sed实现呢?
 楼主| 发表于 2010-3-24 18:18:31 | 显示全部楼层

回复 2楼 的帖子

这个方法试了一下,貌似进入死循环了。
发表于 2010-3-24 21:14:35 | 显示全部楼层

回复 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
发表于 2010-3-25 09:27:09 | 显示全部楼层
gwak是包含的有C语言?
发表于 2010-3-25 13:04:15 | 显示全部楼层

回复 7楼 的帖子

gawk是用C语言编写的,不是包含和被包含的关系,有些语法比较像而已。
发表于 2011-5-16 20:45:21 | 显示全部楼层
批处理这样不知行否?

  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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:30 , Processed in 0.021432 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表