使用perl在文件中用不常见项组织公共项

使用perl在文件中用不常见项组织公共项,perl,Perl,我有一个文件包含这样的数据3列。这可能有数千行。列 A 6:23 started A 7:12 completed B 9:14 started B 10:21 completed C 12:33 started C 13:44 completed 我希望像使用perl一样获得输出 First_col start_time end_time ( 3 columns) A 6:23 7:12 B

我有一个文件包含这样的数据3列。这可能有数千行。列

A    6:23   started 
A    7:12   completed
B    9:14   started
B   10:21   completed
C   12:33   started
C   13:44   completed
我希望像使用perl一样获得输出

First_col   start_time  end_time  ( 3 columns)
A           6:23        7:12
B           9:14        10:21
C           12:33       13:44

您可以这样进行替换:

s/([A-Z])( [0-9]{1,2}:[0-9]{1,2}) started \1((?2)) completed/$1$2$3/g

或者更短,您可以删除不需要的内容:

s/ started [A-Z]| completed//g
#/usr/bin/perl-w
严格使用;
使用5.014;
my$idxLine=0;
我的@coll;
我的$entry;
而(){
下一步,如果m/^$/;#跳过空行。
如果(++$idxLine%2){
$entry=CEntry->new($\ux);
}
否则{
$entry->setCompleted($\ux);
推送(@coll$entry);
}
}
printf(“%s%s%s\n”)、$\u->{name}、$\u->{start}、$\u->{completed})foreach@coll;
包装中心;
严格使用;
使用5.014;
次新{
我的($class,$name,$start)=($\u0],(拆分(/\s/,$\u1])[0,1]);
返回bless({name=>$name,start=>$start},$class);
}
子集合已完成{
我的($self,$completed)=($\u[0],(拆分(/\s/,$\u[1]))[1]);
$self->{completed}=$completed;
}
运行:

$cat数据
一场6点23分的比赛开始了
A 7点12分完成
B 9:14开始
B 10:21完成
C 12:33开始
C 13:44完成
美元/a.pl数据
A 6:23 7:12
B 9:14 10:21
C 12:33 13:44
$./a.pl<数据
A 6:23 7:12
B 9:14 10:21
C 12:33 13:44
#!/usr/bin/perl -w
use strict;
use 5.014;

my $idxLine = 0;
my @coll;
my $entry;
while (<>) {
    next if m/^$/; # Skip empty lines.
    if (++$idxLine % 2) {
        $entry = CEntry->new($_);
    }
    else {
        $entry->setCompleted($_);
        push(@coll, $entry);
    }
}

printf("%s %s %s\n", $_->{name}, $_->{start}, $_->{completed}) foreach @coll;

package CEntry;
use strict;
use 5.014;
sub new {
    my ($class, $name, $start) = ($_[0], (split(/\s/, $_[1]))[0,1]);
    return bless({name => $name, start => $start}, $class);
}
sub setCompleted {
    my ($self, $completed) = ($_[0], (split(/\s/, $_[1]))[1]);
    $self->{completed} = $completed;
}
$ cat data
A 6:23 started

A 7:12 completed

B 9:14 started

B 10:21 completed

C 12:33 started

C 13:44 completed
$ ./a.pl data
A 6:23 7:12
B 9:14 10:21
C 12:33 13:44
$ ./a.pl < data
A 6:23 7:12
B 9:14 10:21
C 12:33 13:44