操作大文本,awk vs vim
Published on 一月 19, 2010
呃,真不知道是我推广有误,还是别的原因。至今组里还是我一个人用vim做开发环境,大家倒是对vim的正则表达式更感兴趣,当然,实际上是,对让我帮忙操作更感兴趣……
今天小组有一次大的对外数据迁移,同事有个需求,要在一个300多万行的文本文件中,将前150多万删掉……
于是,我打开vim,到150多万行,然后dgg。
结果,可想而知……死机……
同事转而求其他,用awk命令……
脚本如下:
awk 'NR>1759668 {print $1" "$2}' uin_newopenid_0 >uin_newopenid_0_haha
上面命令的意思就是,将大于1759668行的号码,从 uin_newopenid_0 中写入到 uin_newopenid_0_haha,相当于间接实现了删除操作。
整个过程不到5秒……
唉,果然用正确的工具做正确的事情才是王道啊。
不过我还是强烈推荐大家用vim做代码编辑器,IDE~~~~~
哈哈,就这样啦~
版权所有,转载请注明出处.http://www.vimer.cn
原创文章,版权所有。转载请注明:转载自Vimer的程序世界 [ http://www.vimer.cn ]
本文链接地址: http://www.vimer.cn/?p=812
有一个东西 叫 sed
[回复]
Dante 回复:
一月 20th, 2010 at 9:31 上午
呃,说实话,我的确从来没有用过sed,刚查了一下:
$ sed ’2d’ example—–删除example文件的第二行。
$ sed ’2,$d’ example—–删除example文件的第二行到末尾所有行。
$ sed ‘$d’ example—–删除example文件的最后一行。
$ sed ‘/test/’d example—–删除example文件所有包含test的行。
只是不知道效率怎么样?
[回复]
依云 回复:
十一月 30th, 2010 at 1:08 下午
最近才会的——
sed -n -i ’1759668,$p’ uin_newopenid_0
[回复]
sed, awk 都是好东西,就是我都不太会用。
如果是大量数据的处理,千万别用 Vim。Vim 是文本编辑器,不是文本处理器。
sed 效率至少比 Vim 高很多。我用 sed 处理 10000+ 个网页(比较小的),正则替换,结果不用一分钟就搞定了,如果磁盘 I/O 够快的话应该能更快。
[回复]
Dante 回复:
一月 21st, 2010 at 10:12 下午
哈哈,是啊,看来还是太依赖于vim啦~~
不过有时候用vim做正则替换做多了,就忍不住……
ps:我最近连有些代码都用vim来自动生成,额,太懒了……
[回复]
嘿,同学,做个链接行不?同样的vimer,到我网站去看一下,虽然我们做的可能不太相同。。
觉得好的话知会一声,我再过来看哈。。
[回复]
Dante 回复:
一月 27th, 2010 at 4:41 下午
呵呵,已经加上啦。你的博客很炫啊~~
[回复]
GuoJing 回复:
一月 27th, 2010 at 5:10 下午
好,我这就做上
[回复]
呵,刚在我的论坛上有人留了你的网址,特地跑过来看一下
看来我俩的推广都很失败,目前公司里也只有我一个人用vim,sigh~~~
这个问题貌似也可以用tail解决。
其实vim的ex命令(即命令行命令),和sed的命令是一样的
[回复]
Dante 回复:
二月 4th, 2010 at 9:32 上午
哈哈,推广vim任重道远啊,tail也可以?!看样子我对linux的命令还不是很熟悉啊~~
[回复]
看到楼上在交换链接,我们也可以交换一下,呵呵
[回复]
alexandercer 回复:
三月 1st, 2010 at 3:00 下午
居然是easwy 大大的留言啊…不小心遇到了…
[回复]
吴叔 回复:
十一月 28th, 2010 at 11:32 下午
几个大神都来了..刚准备把这个博客看完看您的那个系列教程..
[回复]
Dante 回复:
三月 8th, 2010 at 6:08 下午
好的啊~~不知道该加您哪个链接呢?我看你是一个博客一个论坛呢~~
[回复]
Easwy 回复:
四月 12th, 2010 at 2:18 下午
添加博客的链接吧:
http://easwy.com/blog/
我已经加上了你的
[回复]
Dante 回复:
四月 12th, 2010 at 2:59 下午
链接已加~~~ 多多交流~~~哈哈
[回复]
估计vim学习周期太长了,有些功能不是很直接。对打字速度也有所要求。
[回复]
Dante 回复:
二月 4th, 2010 at 10:29 下午
呵呵,是啊,没有投入就没有产出,还真是放之四海而皆准的哲理啊
[回复]
jungle 回复:
四月 26th, 2011 at 7:56 上午
学习周期还不是很长吧,改变一下习惯,很快的,至于打字速度,对程序员来说应该不是啥问题吧
[回复]
Dante 回复:
四月 26th, 2011 at 2:50 下午
哈哈,一旦上手,理解了vim的设计思想,就会很快~~
[回复]
jungle 回复:
四月 26th, 2011 at 6:59 下午
确实,习惯了vim的操作方式,真的对windows下面的编辑器没有啥想法了,都一个样
vim可以做到指哪打哪,而且还支持扩展功能,要是自己想要什么新功能,用脚本语言写就可以了,还支持python,不知道开放的接口到什么程度了
[回复]
Dante 回复:
四月 26th, 2011 at 11:46 下午
对python的使用没有任何限制~~ python2.x和python3都支持~~ 哈哈,最喜欢的编辑器+最喜欢的语言~~
[回复]
jungle 回复:
四月 27th, 2011 at 7:55 上午
呵呵 最近才开始接触这两东西,目前的程度也就是堪堪看完帮助文件。python写代码确实感觉还不错,也不需要编译链接的过程~ 后续要怎么深入学习我还真有点迷茫啊
[回复]
jungle 回复:
四月 27th, 2011 at 7:57 上午
跟c相比,python多了对象支持和异常处理机制,确实很方便,不过习惯了c的思维方式,在用python的时候不知道怎么用面向对象了
[回复]
sed awk叫做流编辑器,专门处理大型数据流
用普通文本编辑器编辑大文件就是噩梦。前一段时间我用vim编辑一个160M的XML,打开以后定位到文件末尾需要5分钟,后来还是搭了一个MSYS用sed搞定。
[回复]
Dante 回复:
四月 16th, 2010 at 6:15 下午
哈哈,太依赖vim啦,不过用到sed 和 awk的机会不多……所以就没怎么学~
[回复]
150W行有这么慢么?
我用我自己写的编辑器,操作1000W行的文本,也就是零点几秒的事.文件有好几百MB
试了一下VIM,感觉也不慢.估计是楼主的内存太小…
[回复]
Dante 回复:
五月 14th, 2010 at 9:24 上午
2G的内存……应该够了呀……,自此操作大文本都是用awk了……
[回复]
sed才是最适合这个需求的….
[回复]
sed是vim的命令行版,这里很适合用sed。
在合适的场景里面用合适的工具确实会事半功倍!
[回复]
博主的机器多大内存,我的ubuntu挂16G,经常用vim打开上百m的文本文件,丝毫没有卡的感觉。
3060484行的txt,vim载入+自动转码也就7s左右,很爽阿。
[回复]
Dante 回复:
九月 4th, 2011 at 1:01 下午
额。。开发机只有2G。。。
[回复]