免费注册 查看新帖 |

Chinaunix

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

shell版的一题,用perl如何实现? [复制链接]

论坛徽章:
8
双子座
日期:2013-08-31 07:37:12金牛座
日期:2013-09-09 18:49:12处女座
日期:2013-09-23 11:43:14处女座
日期:2013-10-09 19:48:21狮子座
日期:2014-03-24 18:22:12丑牛
日期:2014-04-22 22:07:51申猴
日期:2014-06-12 21:54:13双鱼座
日期:2014-06-13 21:52:31
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-04 13:56 |只看该作者 |倒序浏览
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4093501  目前自己在写遇到一些困难,看大家有没有好的思路和方法

论坛徽章:
3
未羊
日期:2013-11-18 15:17:06酉鸡
日期:2013-12-06 17:07:16天蝎座
日期:2014-06-11 12:37:07
2 [报告]
发表于 2013-08-04 16:41 |只看该作者
先把你自己写的放出来。不然没法帮你改啊!

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
3 [报告]
发表于 2013-08-04 16:49 |只看该作者
这问题我纠结了一下午,一直在纠结 ,结果还是没搞出来

论坛徽章:
8
双子座
日期:2013-08-31 07:37:12金牛座
日期:2013-09-09 18:49:12处女座
日期:2013-09-23 11:43:14处女座
日期:2013-10-09 19:48:21狮子座
日期:2014-03-24 18:22:12丑牛
日期:2014-04-22 22:07:51申猴
日期:2014-06-12 21:54:13双鱼座
日期:2014-06-13 21:52:31
4 [报告]
发表于 2013-08-04 18:54 |只看该作者
明天给你个残次品,现在公司^_^
回复 2# 墨迹哥


   

论坛徽章:
8
双子座
日期:2013-08-31 07:37:12金牛座
日期:2013-09-09 18:49:12处女座
日期:2013-09-23 11:43:14处女座
日期:2013-10-09 19:48:21狮子座
日期:2014-03-24 18:22:12丑牛
日期:2014-04-22 22:07:51申猴
日期:2014-06-12 21:54:13双鱼座
日期:2014-06-13 21:52:31
5 [报告]
发表于 2013-08-04 18:54 |只看该作者
大牛,加油
回复 3# rubyish


   

论坛徽章:
6
卯兔
日期:2013-11-26 14:52:02丑牛
日期:2014-02-19 18:01:25卯兔
日期:2014-05-20 20:34:06白羊座
日期:2014-05-23 13:39:232015亚冠之大阪钢巴
日期:2015-08-07 20:57:582015亚冠之大阪钢巴
日期:2015-09-02 14:09:09
6 [报告]
发表于 2013-08-05 18:56 |只看该作者
  1. #!/usr/bin/perl
  2. use 5.016;
  3. use strict;
  4. use warnings;
  5. use Data::Dumper;
  6. use Mojo::UserAgent;
  7. use Tie::File;
  8. my @arr;
  9. my @a1=qw(A_ag_run1 A_ag_run2 A_ag_run3 A_ag_run4 A_ag_run5 A_ag_run6);
  10. my @a2=qw(A_al_run1 A_al_run2 A_al_run3 A_al_run4 A_al_run5 A_al_run6);
  11. my @a3=qw(A_an_run1 A_an_run2 A_an_run3 A_an_run4 A_an_run5 A_an_run6);
  12. tie @arr, 'Tie::File', 'A.txt' or die;
  13. my $tmp=0;
  14. for(my $i=9;$i<=180;$i+=10){
  15.    if($i>=9 && $i<=59){
  16.     state $count=0;
  17.     my @a=@arr[$tmp..$i];  
  18.     open OUT,'>',"$a1[$count++].txt";
  19.     say OUT  $_ for @a;
  20.    
  21.    }elsif($i>=69 && $i<=119){
  22.     state $count=0;
  23.     my @a=@arr[$tmp..$i];
  24.     open OUT,'>',"$a2[$count++].txt";
  25.     say OUT  $_ for @a;
  26.    
  27.    }elsif($i>=129 && $i<=179){
  28.     state $count=0;
  29.     my @a=@arr[$tmp..$i];
  30.     open OUT,'>',"$a3[$count++].txt";
  31.     say OUT  $_ for @a;
  32.    
  33.    }
  34.     $tmp=$i+1;
  35. }
  36. close OUT;
复制代码
试试tie::file

论坛徽章:
6
丑牛
日期:2014-03-21 15:42:04子鼠
日期:2014-04-12 11:50:17处女座
日期:2014-09-01 09:25:1115-16赛季CBA联赛之吉林
日期:2015-12-22 14:01:5215-16赛季CBA联赛之广东
日期:2016-03-08 18:49:422016科比退役纪念章
日期:2016-07-06 12:19:55
7 [报告]
发表于 2013-08-05 22:51 |只看该作者
本帖最后由 stanley_tam 于 2013-08-05 23:00 编辑

偶试试:
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. # split A.txt

  5. sub main;
  6. sub read_10_lines;
  7. sub write_lines;
  8. sub get_fh;

  9. main();

  10. sub main {
  11.     my $file = 'A.txt';
  12.     my $fh = get_fh($file, '<');

  13.     for my $char ('g', 'l', 'n'){
  14.         for my $n (1 .. 6){
  15.             write_lines( "A_a${char}_run$n", read_10_lines($fh) )
  16.         }
  17.     }
  18.     print "Done\n";
  19. }

  20. sub read_10_lines {
  21.     my ($fh) = @_;
  22.     my @lines = ();
  23.     my $counter = 1;
  24.     while (my $line = <$fh>) {
  25.         push @lines, $line;
  26.         last if $counter == 10;
  27.         $counter++;
  28.     }
  29.     return \@lines;
  30. }

  31. sub write_lines {
  32.     my ($file, $lines_aref) = @_;
  33.     my $fh = get_fh($file, '>');
  34.     for my $line ( @{$lines_aref} ){
  35.         print {$fh} $line or
  36.             die "Write to $file failed: $!\n";
  37.     }
  38.     close $fh;
  39. }

  40. sub get_fh {
  41.     my ($file, $mode) = @_;
  42.     open my $fh, $mode, $file or
  43.         die "Could not open file $file:$!\n";
  44.     return $fh;
  45. }
  46. __END__
复制代码
回复 1# kernel69


   

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
8 [报告]
发表于 2013-08-06 05:27 |只看该作者
这问题我纠结了

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
9 [报告]
发表于 2013-08-07 05:06 |只看该作者
本帖最后由 rubyish 于 2013-08-07 01:23 编辑

:
  1. #!/usr/bin/perl
  2. my $h = [qw/A_ag_run A_al_run A_an_run/];
  3. my $t = [ 1 .. 6 ];
  4. my @d = <>;
  5. map { open my $f, '>', $_; print $f splice @d, 0, 10 }
  6.     glob '{'.join( '}{', map join( ',', @$_ ), $h, $t ).'}';
复制代码
  1. perl abc.pl data
复制代码

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
10 [报告]
发表于 2013-08-07 05:12 |只看该作者
本帖最后由 rubyish 于 2013-08-07 01:13 编辑

:
  1. #!/usr/bin/perl
  2. my @h = qw/A_ag_run A_al_run A_an_run/;
  3. my $f;
  4. while (<>) {
  5.     $. % 10 - 1 or open $f, '>', $h[ ( $. / 60 ) % 18 ] . ( ( $. / 10 ) % 6 + 1 );
  6.     print $f $_;
  7. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP