将来自Perl脚本中数组的拆分变量排序为这种特定格式?

时间:2018-10-10 14:40:14

标签: perl loops unix scripting sybase

我编写了一个脚本,该脚本使用两个参数调用另一个脚本,其中一个是日志文件,另一个是sql文件,我要捕获的是数据库中的spid和cid(两个条目),我设法将输出捕获到数组中。例如325是spid,而p58是cid。

325    p58
525    p58
591    p58
1180   p85

但是我应该以一种特定的格式来安排它,其中不能有任何重复的cid,并且每个cid都应该在其旁边打印其spid。我已经成功地拆分了数组,这是到目前为止我能想到的

p58- 325
p58- 525
p58- 591
p58- 1180 

,这是必需的格式。

p58- 325、525、591、1180

    my @results = capture( [0,1,2], $^X, "/asp_batch/bin/clientquery.pl", @ARGV);


    my $size =  scalar(@results);


    for (my $count = 0; $count < $size; $count++)
      {
         my ($spid, $cid) = split /\s+/, $results[$count];
         print $cid, "- ";
         print $spid, "\n";

      }     

1 个答案:

答案 0 :(得分:3)

使用散列收集在cid上索引的值。收集完所有内容后,在哈希中每个键输出一行:

my %hash;

for (my $count = 0; $count < $size; $count++)
      {
         my ($spid, $cid) = split /\s+/, $results[$count];
         # the hash value is an anonymous array
         # it's created automatically for you when
         # you treat the value as a reference
         push @{ $hash{$cid} }, $spid;

      }  

foreach my $cid ( sort keys %hash ) 
    {
      say "$cid- ", join " ", @{ $hash{$cid} };
    }

这是一种非常常见的Perl技术。在大多数情况下,当“仅一次”或“唯一”出现在问题中时,就会有人哈希。