Board logo

标题: [已解决]用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
纯批也不会太慢吧
  1. @echo off
  2. (for /f "tokens=1,2* delims=|" %%a in (test.txt) do echo,%%a^|%%b)>a.txt
  3. pause
复制代码

作者: bailong360    时间: 2015-3-28 20:34

本帖最后由 bailong360 于 2015-3-28 20:43 编辑

50M还真不好说...gawk的,话说写到一行总是出错...
  1. #&Gawk -F "|" -f %0 a.txt&Exit
  2. {print $1"|"$2>"b.txt"}
复制代码
grep的
  1. @Grep -oP "\".*\"\|[0-9]+" a.txt >b.txt
复制代码

作者: Batcher    时间: 2015-3-28 21:39

回复 3# bailong360


这样就行了
  1. gawk -F "|" "{print $1 FS $2}" 1.txt > 2.txt
复制代码

作者: DAIC    时间: 2015-3-28 21:43

  1. 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秒
  1. cd.>2.txt
  2. for /f "tokens=1,2 delims=|" %%i in (1.txt) do (
  3. echo %%i^|%%j>>2.txt
  4. )
复制代码
二楼的P,用时是5秒多
@echo off
  1. (for /f "tokens=1,2* delims=|" %%a in (test.txt) do echo,%%a^|%%b)>a.txt
  2. pause
复制代码
四楼管理员的awk是2秒多
  1. gawk -F "|" "{print $1 FS $2}" 1.txt > 2.txt
复制代码
五楼的SED是3秒多
  1. 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://www.bathome.net/) Powered by Discuz! 7.2