我有两个数组:@devicedat
和@timestamp
以下方式。
@timestamp
Nov 20 21:58:41 PST 2016
Nov 20 21:59:11 PST 2016
Nov 20 21:59:41 PST 2016
@devicedat
sda 28.00 0.00 10.00 0.00 156.00 0.00 31.20 0.04 3.70 3.60 3.60
sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sda2 28.00 0.00 4.00 0.00 128.00 0.00 64.00 0.03 6.50 6.50 2.60
sda3 0.00 0.00 6.00 0.00 28.00 0.00 9.33 0.01 1.83 1.67 1.00
sdb 0.00 0.00 0.00 2.00 0.00 8.00 8.00 0.00 0.50 0.50 0.10
sdb1 0.00 0.00 0.00 2.00 0.00 8.00 8.00 0.00 0.50 0.50 0.10
sdc 0.00 0.00 1351.00 0.00 5404.00 0.00 8.00 0.76 0.56 0.56 76.00
sdc1 0.00 0.00 1351.00 0.00 5404.00 0.00 8.00 0.76 0.56 0.56 76.00
sda 0.00 0.00 14.00 0.00 56.00 0.00 8.00 0.01 0.50 0.50 0.70
sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sda2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sda3 0.00 0.00 14.00 0.00 56.00 0.00 8.00 0.01 0.50 0.50 0.70
sdb 0.00 0.00 89.00 0.00 356.00 0.00 8.00 0.14 1.52 1.52 13.50
sdb1 0.00 0.00 89.00 0.00 356.00 0.00 8.00 0.14 1.52 1.52 13.50
sdc 0.00 0.00 513.00 0.00 2052.00 0.00 8.00 0.75 1.45 1.46 74.70
sdc1 0.00 0.00 513.00 0.00 2052.00 0.00 8.00 0.75 1.45 1.46 74.70
我想将时间戳附加到Perl中的每个磁盘,并需要输出如下:
Nov 20 21:58:41 PST 2016,sda 28.00 0.00 10.00 0.00 156.00 0.00 31.20 0.04 3.70 3.60 3.60
Nov 20 21:58:41 PST 2016, sda1.....
Nov 20 21:58:41 PST 2016, sda2.....
Nov 20 21:58:41 PST 2016, sda3.....
Nov 20 21:58:41 PST 2016, sdb......
Nov 20 21:58:41 PST 2016, sdb1.....
Nov 20 21:58:41 PST 2016, sdc......
Nov 20 21:58:41 PST 2016, sdc1.....
Nov 20 21:59:11 PST 2016, sda......
Nov 20 21:59:11 PST 2016, sda1.....
Nov 20 21:59:11 PST 2016, sda2.....
Nov 20 21:59:11 PST 2016, sda3.....
Nov 20 21:59:11 PST 2016, sdb......
Nov 20 21:59:11 PST 2016, sdb1.....
如何在Perl中以上述方式附加值?我希望附加到所有磁盘的时间戳的值能够以CSV格式解释设备数据。
答案 0 :(得分:1)
您想要的是Cartesian Product。您必须将每个集合的迭代器嵌套在一起,如下所示:
use strict;
use warnings;
my @timestamp = (
'Nov 20 21:58:41 PST 2016',
'Nov 20 21:59:11 PST 2016',
'Nov 20 21:59:41 PST 2016',
);
my @devicedat = (
'sda 28.00 0.00 10.00 0.00 156.00 0.00 31.20 0.04 3.70 3.60 3.60',
'sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00',
'sda2 28.00 0.00 4.00 0.00 128.00 0.00 64.00 0.03 6.50 6.50 2.60',
'sda3 0.00 0.00 6.00 0.00 28.00 0.00 9.33 0.01 1.83 1.67 1.00',
'sdb 0.00 0.00 0.00 2.00 0.00 8.00 8.00 0.00 0.50 0.50 0.10',
'sdb1 0.00 0.00 0.00 2.00 0.00 8.00 8.00 0.00 0.50 0.50 0.10',
'sdc 0.00 0.00 1351.00 0.00 5404.00 0.00 8.00 0.76 0.56 0.56 76.00',
'sdc1 0.00 0.00 1351.00 0.00 5404.00 0.00 8.00 0.76 0.56 0.56 76.00',
'sda 0.00 0.00 14.00 0.00 56.00 0.00 8.00 0.01 0.50 0.50 0.70',
'sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00',
'sda2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00',
'sda3 0.00 0.00 14.00 0.00 56.00 0.00 8.00 0.01 0.50 0.50 0.70',
'sdb 0.00 0.00 89.00 0.00 356.00 0.00 8.00 0.14 1.52 1.52 13.50',
'sdb1 0.00 0.00 89.00 0.00 356.00 0.00 8.00 0.14 1.52 1.52 13.50',
'sdc 0.00 0.00 513.00 0.00 2052.00 0.00 8.00 0.75 1.45 1.46 74.70',
'sdc1 0.00 0.00 513.00 0.00 2052.00 0.00 8.00 0.75 1.45 1.46 74.70',
);
my @product = ();
for my $timestamp ( @timestamp ){
for my $devicedat ( @devicedat ){
push @product, "$timestamp, $devicedat";
}
}
print "$_\n" for @product;
有关Cartesian Product in Perl的更多详情。