想问有关grep的函数
A_Shanghai-Jinshan_13_2011 8 NSTA 0.8099 (9/9) +++
A_Shanghai-Jinshan_13_2011 22 NGTI 0.7020 (9/9) ++
A_Shanghai-Jinshan_13_2011 38 NATE 0.5016 (6/9) +
当第4列的数值大于0.5的时候,抓出第2列的数值,写程序逐行判断肯定没问题,但那样就不是perl的风格啦,我想用grep函数是不是可以实现呢?
但是正则表达式基础不是很好,也不知道该怎么弄,所以拿出来跟大家讨论一下,请高人指点指点,thanks
作者: camus1984 发布时间: 2011-05-13
作者: zhlong8 发布时间: 2011-05-13
作者: Cu_fans 发布时间: 2011-05-13
zhlong8 发表于 2011-05-13 11:32
感谢您的回复
我对grep理解的不是很透彻
第二列的值保存到别的变量中就可以了
作者: camus1984 发布时间: 2011-05-13
- perl -ane 'if ($F[3] > 0.5) {print $F[1],"\n"}' t
作者: Cu_fans 发布时间: 2011-05-13
Cu_fans 发表于 2011-05-13 11:32
呵呵,看其他人的程序都写的很简单,我也想尝试一下精简代码的
作者: camus1984 发布时间: 2011-05-13
我对grep理解的不是很透彻
第二列的值保存到别的变量中就可以了
camus1984 发表于 2011-05-13 11:33
这里用个 for 循环就可以了,FP 的风格是 先 grep 再 map 没必要,也不清晰
作者: zhlong8 发布时间: 2011-05-13
A_Shanghai-Jinshan_13_2011 8 NSTA 0.8099 (9/9) +++
A_Shanghai ...
camus1984 发表于 2011-05-13 11:17
# cat xx.pl
use strict;
use warnings;
my @aResult;
while(<DATA>){
my @aData = split;
push (@aResult, $aData[1]) if($aData[3] >= 0.5);
}
print "@aResult\n";
__DATA__
A_Shanghai-Jinshan_13_2011 8 NSTA 0.8099 (9/9) +++
A_Shanghai-Jinshan_13_2011 22 NGTI 0.7020 (9/9) ++
A_Shanghai-Jinshan_13_2011 38 NATE 0.5016 (6/9) +
# perl xx.pl
8 22 38
作者: jason680 发布时间: 2011-05-13
use strict;
use warnings;
my @aResult;
while(){
my @aData = split;
pus ...
jason680 发表于 2011-05-13 12:21
多谢啦
作者: camus1984 发布时间: 2011-05-13
#!perl
@D=<DATA>;
print join ",",map {[split(/ +/)]->[1] } grep { [split(/ +/)]->[3]>0.6 } @D;
__DATA__
A_Shanghai-Jinshan_13_2011 8 NSTA 0.8099 (9/9) +++
A_Shanghai-Jinshan_13_2011 22 NGTI 0.7020 (9/9) ++
A_Shanghai-Jinshan_13_2011 38 NATE 0.5016 (6/9) +
作者: ttcn_cu 发布时间: 2011-05-13