Jump to navigation
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点点鼠标就能搞定,就没有必要学习了。
Comments
8条评论
??????????????????????`date +xxxx`????????????????perl??????system?perl???
??????????????perl??????
??????:
???????n??head
???????n??tail
?????grep
?????sed
?????????awk (???????cut, ??????????????????)
????????????awk????????:)
?????????awk/sed????????????????????awk??????sed????editor???????
???????? awk, sed ??????? awk,sed ??????? Perl ??????? awk,sed ????? Perl ??????????????????? awk ? sed ?..
???? Perl???????
http://www.perlchina.org/ar...
??????????????????????????????????????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?????????????????
old ??sed ? '-i' ????? oldfile, newfile ?????:)
???mp3 -> ogg??????????sed??????vim???????????????????
Add Comments
TrackBack
??????????????perl??????