忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 4017 | 回复: 9

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

论坛徽章:
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
发表于 2018-05-10 17:13 |显示全部楼层
为什么就不能有$f[2:16]这种写法。。。。。

论坛徽章:
0
发表于 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
发表于 2018-05-14 10:28 |显示全部楼层
回复 3# iamlimeng

谢谢

论坛徽章:
0
发表于 2018-05-19 14:00 |显示全部楼层
回复 3# iamlimeng

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

论坛徽章:
11
子鼠
日期:2014-10-11 16:46:4815-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:532016科比退役纪念章
日期:2018-03-16 10:24:05
发表于 2018-05-19 17:16 |显示全部楼层
访问数组切片使用 @arr[ start .. end ]; 是 @ 开头的

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

论坛徽章:
0
发表于 2018-05-19 21:03 |显示全部楼层
回复 6# 523066680

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

论坛徽章:
0
发表于 2018-05-20 18:28 |显示全部楼层
回复 6# 523066680

一时糊涂了,多谢指正!

论坛徽章:
0
发表于 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";

论坛徽章:
11
子鼠
日期:2014-10-11 16:46:4815-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:532016科比退役纪念章
日期:2018-03-16 10:24:05
发表于 2018-05-21 15:37 |显示全部楼层
本帖最后由 523066680 于 2018-05-21 16:17 编辑

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


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

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP