免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4892 | 回复: 11
打印 上一主题 下一主题

求助perl循环 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-05-05 15:07 |只看该作者 |倒序浏览
有一组数据:
0
0
0
0
1
2
0
0
5
8
0
0

非0数字共出现2次,想要统计每次出现的行数(2行)及出现次数(2次),应该怎么写?
感激不尽!

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
2 [报告]
发表于 2015-05-05 16:22 |只看该作者
回复 1# miemie_123

$ perl -lane '{if($_!=0){$g++ if(!$n);$m=++$n}else{$n=0}}END{print "$m,$g"}' FILE
2,2

   

论坛徽章:
0
3 [报告]
发表于 2015-05-05 16:32 |只看该作者
多谢!
我是想分别统计每次出现的行数,该怎么写呢?
回复 2# jason680


   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
4 [报告]
发表于 2015-05-05 16:33 |只看该作者
回复 3# miemie_123

example ?

   

论坛徽章:
0
5 [报告]
发表于 2015-05-05 16:37 |只看该作者
就是这组数据,我想要的结果是:
第一次,2行;
第二次,2行;
共2次
回复 4# jason680


   

论坛徽章:
0
6 [报告]
发表于 2015-05-05 16:42 |只看该作者
非0数字共出现统计大概 = 4 次
第1 次出现 大概 = 1 行
第2 次出现 大概 = 2 行
第3 次出现 大概 = 2 行
第4 次出现 大概 = 3 行

大概
my $not0;
my @ary;

while (<DATA>) {
    if ( $_ == 0 ) { $not0 = 0; }
    else           { $not0++ ? $ary[-1]++ : push @ary, 1; }
}

my $i = 1;
say '非0数字共出现统计大概 = ' . @ary . ' 次';
print map { '第' . $i++ . " 次出现 大概 = $_ 行\n" } @ary;

__DATA__
0
1
0
0
1
2
0
0
5
8
0
0
1
1
1

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
7 [报告]
发表于 2015-05-05 16:43 |只看该作者
本帖最后由 jason680 于 2015-05-05 16:44 编辑

回复 5# miemie_123

add more message by yourself

$ perl -lane '{if($_!=0){$c++ if(!$n++)}else{print "$c:$n"if($n);$n=0}}END{print "Total:$c"}' FILE
1:2
2:2
Total:2

   

论坛徽章:
0
8 [报告]
发表于 2015-05-06 10:27 |只看该作者
初学perl,已受教,多谢!!
回复 6# ba_du_co


   

论坛徽章:
0
9 [报告]
发表于 2015-05-06 10:32 |只看该作者
LZ ,你这个例子直接用grep 还直接点儿,自己写细节是完全没必要。

论坛徽章:
0
10 [报告]
发表于 2015-05-06 12:01 |只看该作者
用grep没法得出次数吧,我初学,没想明白怎么用grep
回复 9# yeahnoob


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP