使用perl在文件中用不常见项组织公共项
我有一个文件包含这样的数据3列。这可能有数千行。列使用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
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