免费注册 查看新帖 |

Chinaunix

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

perl同时打印多列应该怎么写 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2018-05-10 16:30 |只看该作者 |倒序浏览
本帖最后由 elaine2017 于 2018-05-10 16:32 编辑

这是我写的脚本,就想问问我想同时输出多列应该怎么改,像我这里种写法太笨了。。。。。。
use strict ;
use warnings ;
if ($#ARGV<0)
{
print STDERR "usage: $0 infile output_file \n";
exit(1);
}
my $infile=$ARGV[0];
my $outfile=$ARGV[1];
my $UMI_1;
my $UMI_2;
open (IN, "$infile") or die "file1 cannot open \n";
open (OUT, ">$outfile") or die "$! error creating output file";

while (<IN>)
      {
           chomp;
           my @f=split();
           my @g=split(/\|/,$f[0]);
           my $UMI_1= substr $g[1],0,12;
           my $UMI_2= substr $g[1],12;
           print OUT "$g[0]\t$UMI_1\t$UMI_2\t$f[1]\t$f[2]\t$f[3]\t$f[4]\t$f[5]\t$f[6]\t$f[7]\t$f[8]\t$f[9]\t$f[10]\t$f[11]\t$f[12]\t$f[13]\t$f[14]\t$f[15]\t$f[16]\n";
       }
close IN;
close OUT;

论坛徽章:
0
2 [报告]
发表于 2018-05-10 17:13 |只看该作者
为什么就不能有$f[2:16]这种写法。。。。。

论坛徽章:
0
3 [报告]
发表于 2018-05-13 10:09 |只看该作者
本帖最后由 iamlimeng 于 2018-05-20 18:27 编辑

Perl这种语法最丰富了,比其他语言多得多:

  1. print OUT "$g[0]\t$UMI_1\t$UMI_2\t$f[1]\t",join("\t",@f[2..16]),"\n";  
复制代码

论坛徽章:
0
4 [报告]
发表于 2018-05-14 10:28 |只看该作者
回复 3# iamlimeng

谢谢

论坛徽章:
0
5 [报告]
发表于 2018-05-19 14:00 |只看该作者
回复 3# iamlimeng

报错了诶:Argument "" isn't numeric in array element at rearrangement2.pl line 26, <IN> line 30838.

论坛徽章:
12
子鼠
日期:2014-10-11 16:46:482016科比退役纪念章
日期:2018-03-16 10:24:0515-16赛季CBA联赛之山东
日期:2017-11-10 14:32:142016科比退役纪念章
日期:2017-09-02 15:42:4715-16赛季CBA联赛之佛山
日期:2017-08-28 17:11:5515-16赛季CBA联赛之浙江
日期:2017-08-24 16:55:1715-16赛季CBA联赛之青岛
日期:2017-08-17 19:55:2415-16赛季CBA联赛之天津
日期:2017-06-29 10:34:4315-16赛季CBA联赛之四川
日期:2017-05-16 16:38:55黑曼巴
日期:2016-07-19 15:03:112015亚冠之萨济拖拉机
日期:2015-05-22 11:38:5315-16赛季CBA联赛之北京
日期:2019-08-13 17:30:53
6 [报告]
发表于 2018-05-19 17:16 |只看该作者
访问数组切片使用 @arr[ start .. end ]; 是 @ 开头的

示例
  1. my @f = ('a'..'z');
  2. print join("\t", @f[2..16]), "\n";
复制代码

论坛徽章:
0
7 [报告]
发表于 2018-05-19 21:03 |只看该作者
回复 6# 523066680

哦,原来错在这里啊,我再试试

论坛徽章:
0
8 [报告]
发表于 2018-05-20 18:28 |只看该作者
回复 6# 523066680

一时糊涂了,多谢指正!

论坛徽章:
0
9 [报告]
发表于 2018-05-21 10:23 |只看该作者
回复 6# 523066680

再请教一下,如果每一行列数是不确定的,那么就是打印第2列到最后一列,试了一下,这种写法好像是不对的。perl中有类似的操作吗print OUT "$g[0]\t$UMI_1\t$UMI_2\t$f[1]\t",join("\t",@f[2..]),"\n";

论坛徽章:
12
子鼠
日期:2014-10-11 16:46:482016科比退役纪念章
日期:2018-03-16 10:24:0515-16赛季CBA联赛之山东
日期:2017-11-10 14:32:142016科比退役纪念章
日期:2017-09-02 15:42:4715-16赛季CBA联赛之佛山
日期:2017-08-28 17:11:5515-16赛季CBA联赛之浙江
日期:2017-08-24 16:55:1715-16赛季CBA联赛之青岛
日期:2017-08-17 19:55:2415-16赛季CBA联赛之天津
日期:2017-06-29 10:34:4315-16赛季CBA联赛之四川
日期:2017-05-16 16:38:55黑曼巴
日期:2016-07-19 15:03:112015亚冠之萨济拖拉机
日期:2015-05-22 11:38:5315-16赛季CBA联赛之北京
日期:2019-08-13 17:30:53
10 [报告]
发表于 2018-05-21 15:37 |只看该作者
本帖最后由 523066680 于 2018-05-21 16:17 编辑

$#arr  表示最后一个。
-1 也可以表示最后一个,但是 2..-1 是不能用的,所以还是 $#arr


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP