GNU文本处理实用程序


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发表。目录:电脑

Comments

8条评论

fishy:

??????????????????????`date +xxxx`????????????????perl??????system?perl???
??????????????perl??????
于 04/27/06 18:17:32 发表  http://wang.yuxuan.org/blog/

windix:

??????:
???????n??head
???????n??tail
?????grep
?????sed
?????????awk (???????cut, ??????????????????)

????????????awk????????:)
于 04/27/06 21:07:01 发表  http://douzi.org

cathayan:

?????????awk/sed????????????????????awk??????sed????editor???????
于 04/27/06 21:37:28 发表  

Qiang:

???????? awk, sed ??????? awk,sed ??????? Perl ??????? awk,sed ????? Perl ??????????????????? awk ? sed ?..
???? Perl???????
http://www.perlchina.org/ar...
于 04/27/06 22:40:46 发表  http://qiang@perlchina.org

windix:

??????????????????????????????????????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?????????????????
于 04/27/06 22:41:42 发表  http://douzi.org

william:

old ??sed ? '-i' ????? oldfile, newfile ?????:)
于 04/28/06 08:57:03 发表  http://williamxu.net9.org

fishy:

???mp3 -> ogg??????????sed??????vim???????????????????
于 04/28/06 10:50:29 发表  http://wang.yuxuan.org/blog/

noname:

??GNUWin32
http://gnuwin32.sourceforge...
于 05/23/06 14:35:00 发表  

Add Comments

This item is closed, it's not possible to add new comments to it or to vote on it

TrackBack