标题: [已解决]用SED快速提取指定分隔符间的字段 [打印本页]
作者: userwww 时间: 2015-3-28 19:21 标题: [已解决]用SED快速提取指定分隔符间的字段
本帖最后由 userwww 于 2015-3-28 23:14 编辑
有一文本50M,几十万行,如何能快速提取出分隔符|第一及第二段的内容,可用sed等工具,谢谢
"c:\AILog.txt"|0|130691370615909692|130687957107313120|32
"c:\autoexec.bat"|24|128891437401258876|128920106441575908|32
...
结果
"c:\AILog.txt"|0
"c:\autoexec.bat"|24
...
问题已解决,谢谢各位,不知道只能评一次分,后面的各位不好意思了,再次感谢
作者: pcl_test 时间: 2015-3-28 19:47
回复 1# userwww
纯批也不会太慢吧- @echo off
- (for /f "tokens=1,2* delims=|" %%a in (test.txt) do echo,%%a^|%%b)>a.txt
- pause
复制代码
作者: bailong360 时间: 2015-3-28 20:34
本帖最后由 bailong360 于 2015-3-28 20:43 编辑
50M还真不好说...gawk的,话说写到一行总是出错...- #&Gawk -F "|" -f %0 a.txt&Exit
- {print $1"|"$2>"b.txt"}
复制代码
grep的- @Grep -oP "\".*\"\|[0-9]+" a.txt >b.txt
复制代码
作者: Batcher 时间: 2015-3-28 21:39
回复 3# bailong360
这样就行了- gawk -F "|" "{print $1 FS $2}" 1.txt > 2.txt
复制代码
作者: DAIC 时间: 2015-3-28 21:43
- sed "s/^\([^|]\+|[^|]\+\).*/\1/" 1.txt > 2.txt
复制代码
作者: bailong360 时间: 2015-3-28 22:01
回复 4# Batcher
受教了,原来FS可以这样用
作者: userwww 时间: 2015-3-28 22:38
本帖最后由 userwww 于 2015-3-28 22:40 编辑
非常感谢楼上的各位!
这是我的P,用时是65秒- cd.>2.txt
- for /f "tokens=1,2 delims=|" %%i in (1.txt) do (
- echo %%i^|%%j>>2.txt
- )
复制代码
二楼的P,用时是5秒多
@echo off- (for /f "tokens=1,2* delims=|" %%a in (test.txt) do echo,%%a^|%%b)>a.txt
- pause
复制代码
四楼管理员的awk是2秒多- gawk -F "|" "{print $1 FS $2}" 1.txt > 2.txt
复制代码
五楼的SED是3秒多- sed "s/^\([^|]\+|[^|]\+\).*/\1/" 1.txt > 2.txt
复制代码
因本机上没有GREP,就没测到它的速度,为什么我的P会慢那么多呢?
作者: DAIC 时间: 2015-3-28 22:43
回复 7# userwww
认真读完:提高批处理代码效率的常用技巧及方案
http://bbs.bathome.net/thread-4831-1-1.html
http://bbs.bathome.net/thread-4482-1-1.html
http://bbs.bathome.net/viewthread.php?tid=4482#pid28940
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |