どんなもんでしょ。

#! /usr/bin/perl -w

use strict;

my @bslist = ();
my @prlist = ();
my %bshash = ();
while (<>) {
chomp;
my ($bsname, $start, $end, $title, $caption) = split(/\t/);
if (!defined $bshash{$bsname}) {
push(@bslist, $bsname);
$bshash{$bsname} = $#bslist;
}
push(@prlist, [$bsname, $start, $title, $caption]);
}
my %prhash = ();
for (@prlist) {
my ($bsname, $start, $title, $caption) = @$_;
if (!defined $prhash{$bsname}) {
$prhash{$start} = [('~') x @bslist];
}
my $time = $start;
$time =~ s/\d{8}(\d{2})(\d{2})/$1:$2/;
$title .= "&br;$caption" if $caption ne '';
$prhash{$start}->[$bshash{$bsname}] = "$time $title";
}
print '||~', join('|~', @bslist), "|h\n";
my $hour = '';
my $f = 0;
for (sort keys %prhash) {
print '|~';
if ($hour ne substr($_,8,2)) {
$hour = substr($_,8,2);
print $hour;
}
if (!$f) {
$f = 1;
for (@{$prhash{$_}}) {
$_ =~ s/^~$//;
}
}
print '|', join('|', @{$prhash{$_}}), "|\n";
}
print '||~', join('|~', @bslist), "|f\n";