标题: [文本处理] 批处理怎么过滤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
- 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 - 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
- @Echo Off&Setlocal Enabledelayedexpansion
- (for /f "delims=" %%i in (a.txt) do (
- set c=!b!&set b=!a!&set a=%%i
- echo !c! |findstr /i "^tel:151">nul&&(echo !c!&echo !b!&echo !a!&echo.)))>b.txt
- pause
复制代码
作者: ilovebath 时间: 2011-9-7 21:27
回复 6# lvsehuaxue
这段代码效率不高,太慢了,比gawk差远了,这段代码并不能指定过滤我写出的三个属性tel,zz,user这三个属性,如果txt 文件中有十几个属性怎么办呢?
作者: awk 时间: 2011-9-8 09:00
回复 5# ilovebath - 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 - 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
你看看可以不- 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://bbs.bathome.net/) |
Powered by Discuz! 7.2 |