Board logo

标题: [文本处理] 批处理怎么过滤txt中的字符? [打印本页]

作者: ilovebath    时间: 2011-9-7 17:50     标题: 批处理怎么过滤txt中的字符?

比如我有一个txt文件,里面的内容为


site:abc.com
tel:151152

site:eak.com
tel:152153

site:acuk.com
tel:151159


我的意思是说怎么过滤这个txt中存在tel并且tel的值为151开头的数据。也就是最后重新生成一个新的文件,里面的内容为

site:abc.com
tel:151152

site:acuk.com
tel:151159
作者: awk    时间: 2011-9-7 18:05

  1. gawk "/^tel:151/{print s\"\n\"$0\"\n\"}{s=$0}" a.txt > b.txt
复制代码

作者: ilovebath    时间: 2011-9-7 18:29

回复 2# awk


    如果txt里面的内容是这样的呢?
site:abc.com
tel:151152
dsfdsfdfs
.................................

site:eak.com
tel:152153
zzzzzzzzzz
.....................................

site:acuk.com
tel:151159
dsfdsdzzzzzzzzzzz
...............


我想得到的结果为
site:abc.com
tel:151152
dsfdsfdfs
.................................

site:acuk.com
tel:151159
dsfdsdzzzzzzzzzzz
...............
作者: awk    时间: 2011-9-7 18:36

回复 3# ilovebath
  1. gawk -v RS= "/tel:151/{print $0\"\n\"}" a.txt > b.txt
复制代码

作者: ilovebath    时间: 2011-9-7 18:46

回复 4# awk


    谢谢,如果txt文件里的内容为:

site:abc.com
tel:151152
zz:dsdfskdfsdz
user:xxx

site:eak.com
tel:152153
zz:dsdfskdfsdzzz
user:ccc

site:acuk.com
tel:151159
zz:dsdfskdfsddsdsdsd
user:aaa

我想要的结果是这样的,我相导入tel为151的数据,并且数据为
tel:151152
zz:dsdfskdfsdz
user:xxx

tel:151159
zz:dsdfskdfsddsdsdsd
user:aaa
这样的形式,我们只要包含tel,zz,user这三个属性
作者: lvsehuaxue    时间: 2011-9-7 21:18

  1. @Echo Off&Setlocal Enabledelayedexpansion
  2. (for /f "delims=" %%i in (a.txt) do (
  3.    set c=!b!&set b=!a!&set a=%%i
  4.    echo !c! |findstr /i "^tel:151">nul&&(echo !c!&echo !b!&echo !a!&echo.)))>b.txt
  5. pause
复制代码

作者: ilovebath    时间: 2011-9-7 21:27

回复 6# lvsehuaxue


    这段代码效率不高,太慢了,比gawk差远了,这段代码并不能指定过滤我写出的三个属性tel,zz,user这三个属性,如果txt 文件中有十几个属性怎么办呢?
作者: awk    时间: 2011-9-8 09:00

回复 5# ilovebath
  1. gawk -v RS= "/tel:151/{print $0}" a.txt | gawk "/site:|tel:|user:/{if($0~/site:/||$0~/tel:/)print $0;if($0~/user:/)print $0\"\n\"}"
复制代码

作者: ilovebath    时间: 2011-9-8 09:18

回复 8# awk


    谢谢,你的技术真好,  tel:151 这个地方如果运用通配符呢? 比如我想查找中间为151的数字,怎么写,*151*这样的形式呢?
作者: awk    时间: 2011-9-8 10:06

回复 9# ilovebath
  1. gawk --re-interval -v RS= "/tel:.*151.*/{print $0}" a.txt | gawk "/site:|tel:|user:/{if($0~/site:/||$0~/tel:/)print $0;if($0~/user:/)print $0\"\n\"}"
复制代码

作者: ilovebath    时间: 2011-9-8 10:09

回复 10# awk


    谢谢。
作者: Seder    时间: 2011-9-8 12:47

你看看可以不
  1. sed -n "/tel:151/{p;n;/zz:/p;n;/user:/p;n;/^$/p;}" test.txt
复制代码

作者: cjiabing    时间: 2011-9-8 13:03

呵呵,这个楼主真有意思,硬撑着顶过了三层楼!~
——以后有什么问题请一次性说明,不要这样搞得大家都疲劳。
awk很有耐心,赞一个!~
作者: fanfande    时间: 2011-9-9 16:04

非常佩服awk
ak47




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