04/27/06。 cathayan.org版权所有,保留一切权利。转载请保留此说明。谢绝商业转载。
Unix环境下有一系列的
文本处理实用程序(现在主要是GNU了),但我一直没有从事过这方面的工作,所以了解不深;直到某日,看到个一长串Perl脚本,里面充满了Perl专有变量,正仰慕间,出来一神,用一行Shell给代替了,里面当然有几个管道,外加cut, sort, uniq共3个小程序,真是简单优美啊。
cut: 输出行中选定部分,这部分可以是某些位置上的字符,也可以是一个区段(有分隔的情况,缺省分隔符是TAB)。
sort: 把输入内容(文件)按行排序,可以按整行的字母或数字顺序来排,也可以指定以某个(或某几个)字段为关键字来排,每段也可指定正序或倒序,甚至可以指定按某段中的第几个字符来排序,是不是超强?
uniq: 输出文件中的不重复行,也就是把重复的去掉;当然也可以输出重复行,或是完全没有重复的行。
想来自己编程写个取一行中某字符的程序还算不难,但要把sort写好也不是很容易吧(估计Perl中有现成的库?),有这些GNU出品的东西,实在是太好了。
也曾经处理过一大堆资料,全是Excel表格,简单的像调整一下列的位置了,把记录里多加的某字符替换掉了一类,就在Excel里面做了,但像取出所有列第2-第5字符之间的字符另存一列,或根据某列的数据经过计算生成新的一列这种,就不太会了。
好在对编程还有点概念,又听说过Perl处理文本最强,就找来本入门的书,又装了Activeperl,就开工了。幸好Excel还能输出成文本文件。这类工作用Perl处理实在是牛刀杀鸡,写上几行就解决了,所以到现在也没有写过10行以上的Perl,也不会用Perl的那些奇怪变量。今后要是再有这种工作,也许可以用点GNU工具了。
这一套实用程序也有
Win32版--开源就是好--有人专门打了编译好的,里面程序更多,包括超强的wget,grep等等,还带一个zsh :P 这个包是真正的Win32程序,不需要cygwin一类的中介了。
当然,目的是高效地完成工作,如果在Excel点点鼠标就能搞定,就没有必要学习了。
04/27/06 17:09:44,由
cathayan发表。目录:
电脑
8条评论
给你补充一下:
用于拿到文本前n行的head
用于拿到文本后n行的tail
用于搜索的grep
用于替换的sed
用于逐行处理文本的awk (简单用起来很像cut, 处理一行中的某列或者某几列文本很方便)
最近处理试验数据,学习了awk,效率提高很多。:)
http://douzi.org windix 于 04/27/06 21:07:01 发表.
不要被表象所迷惑,我们一般简单使用还用不到它们那么复杂的功能。要说复杂用法,O'Reilly专门有一本"Sed & Awk"来讲他们:
http://www.oreilly.com/cata...
sed的语法类似ed, vi的始祖,所以指令和vi很像,比如最简单的例子:
sed 's/Cathayan/Windix/g' oldfile >newfile
很好懂吧? :)
再来一个
sed -n 12,18p myfile
把myfile的12-18行内容输出出来
如果不知道sed之前,我可能就会这么用了:
cat myfile | head -n 18 | tail -n 6
awk通常用途都是从一个格式化的文本中提取某几列,输出到新的文件,或者在输出前进行一些简单的操作(比如求和,求平均数),下面来个简单例子:
awk '$1=="tcp" && $2=="1" {print $5+$6, $7}' oldfile > newfile
对于oldfile中的每一行数据,符合第1列为"tcp",第2列为"1"的,输出第5,6两列的和,以及第7列的内容。
最后附个网址
http://www.cs.rmit.edu.au/~...
是对我们一次试验的指导,其中讲sed, awk的内容很简单,也很实用,值得一看。
http://douzi.org windix 于 04/27/06 22:41:42 发表.
I am watching and will delete all spam.