Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1563728
  • 博文数量: 289
  • 博客积分: 11086
  • 博客等级: 上将
  • 技术积分: 3291
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-22 17:06
个人简介

徐小玉的博客。

文章分类

全部博文(289)

文章存档

2023年(6)

2022年(1)

2021年(2)

2020年(9)

2019年(9)

2018年(6)

2017年(10)

2016年(10)

2014年(3)

2013年(4)

2011年(12)

2010年(16)

2009年(14)

2008年(119)

2007年(48)

2006年(20)

我的朋友

分类:

2008-04-01 11:07:06

Perl的grep,实在是与map有太多类似之处,就一起做了笔记吧。

1. grep语法

grep BLOCK LIST
grep EXPR, LIST

看起来和map的一模一样是吧。。。事实上grep也是把LIST里面的元素逐个取出放到$_里面。然后把$_代入BLOCK去计算一个逻辑表达式,当表达式为真的时候,$_进入结果列表。否则就被过滤掉了。

2. 利用正则表达式作统计

假设你是一位简奥斯汀迷。。。现在你想统计她的某篇小说有多少行出现过单词"hence", let's start!

my $FILE;
unless( open( $FILE, " }
my $num_hence = grep /hence/i, <$FILE>;

注意尖括号操作符从文件里逐行取出字符串,成为一个LIST。这里我使用了一个小把戏,grep返回的本是一个符合匹配条件的文件行的数组,但是由于左表达式是一个数,这个数组就被取了长度。

顺便抱怨一下,Perl的open函数在32位的Linux下只能处理不大于2G字节的文件,好在这个世界上还不曾有哪部小说转成txt格式有那么大;但是这个限制对于海量数据处理和生物计算应该是有影响的。

3. 一个不是用正则表达的例子

从一堆xy坐标点里面选择那些在由点(0,5)和(20, 28)构成的矩形框里面的

my @points = ( [0,1], [20, -9], [30, 27], [-1, -15]);
my @points_in_rect = grep { ($_->[0] > 0) && ($_->[0] > 5) && ($_->[1] > 20) && ($_->[1] < 28)} @points;

这个世界上有很多grep fans, 创建了很多让人惊讶的grep用法,有一些很艺术化了,就不说那么远了。我个人并不太偏好使用grep,这里介绍一篇 (这个logo是一头牛)的网站上结合使用grep和map的例子的幻灯片:.

最后。。。有没有觉得最近两篇blog太枯燥?说个无关的好消息:Shakespear大师的著名问题"To be or not to be, that is a question."已经有解了!答案就是FF!真的,解题过程就在这里

0x2B | ~0x2B = 0xFF

阅读(1853) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~