Board logo

标题: [文本处理] 如何用批处理提取文本内指定行内容? [打印本页]

作者: wh1234567    时间: 2010-8-6 08:04     标题: 如何用批处理提取文本内指定行内容?

例如:
txt文本内容如下(注意有不规则的空格,文本内还有其他好多文字,文本也比较大100多KB):

同学:a
   住址:b
北京四环路25号


   同学:cc
住址:dd

上海新区
同学 mm
住址 ee



四川朋友
fff=yyyy
pppp=uuuuu

将以上文本里的相邻行同学和住址后面的内容提取出来合并为一行并用=隔开,然后输出到另外一个文本里。
例如:
a=b
cc=dd
mm=ee
fff=yyyy
pppp=uuuuu



wankoilz的代码不错!但最前面有空格就不能正常提取了,也不能将原本已经有的
fff=yyyy
pppp=uuuuu
同时也提取出来啊,

CUer的代码运行后没有效果!不知道哪里不对?

[ 本帖最后由 wh1234567 于 2010-8-6 18:23 编辑 ]
作者: wankoilz    时间: 2010-8-6 10:44

有的“同学”后面有冒号,有的又没有,到底有没有?O(∩_∩)O~
作者: wh1234567    时间: 2010-8-6 10:57     标题: 有的“同学”后面有冒号,有的又没有,到底有没有?O(∩_∩)O~

“有的“同学”后面有冒号,有的又没有,到底有没有?O(∩_∩)O~”
同时出现2种情况
作者: CUer    时间: 2010-8-6 13:36

  1. gawk -F"[: ]+" "/同学/{printf $2\"=\"}/住址/{print $2}" 1.txt >2.txt
复制代码

作者: wankoilz    时间: 2010-8-6 14:00

  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "delims=" %%i in (a.txt) do (
  3. set "str=%%i"
  4. if "!str:~0,2!"=="同学" set/p=!str:~3!=<nul
  5. if "!str:~0,2!"=="住址" echo !str:~3!
  6. ))>b.txt
复制代码

作者: wh1234567    时间: 2010-8-6 18:29

有不规则的空格,文本内还有其他好多文字,文本也比较大100多KB,为啥不能正常输出啊?
作者: wh1234567    时间: 2010-8-6 18:54     标题: 帮我解释2段代码含义

@echo off&setlocal enabledelayedexpansion
(for /f "delims=" %%i in (a.txt) do (
set "str=%%i"
if "!str:~0,2!"=="同学" set/p=!str:~3!=<nul
if "!str:~0,2!"=="住址" echo !str:~3!
))>b.txt


gawk -F"[: ]+" "/同学/{printf $2\"=\"}/住址/{print $2}" 1.txt >2.txt
这个代码是不是不全?需要加啥代码才完整?
作者: hfg1977    时间: 2010-8-6 19:45

re:
1.都是基础知识,论坛基础学习里有,牵扯太多不予解释,

2.该第三方工具还没学习,无法解释.


作者: wankoilz    时间: 2010-8-6 21:48

楼主最好直接把样本传上来看看。
作者: CUer    时间: 2010-8-6 23:26

不是代码不全,可能是你没有gawk.exe吧。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2