perl -F, -lane '
@ARGV and $Phone_of{$F[0]} = $F[1] =~ s/(...)(...)(.*)/($1)$2-$3/r;
@ARGV or $Person_of{uc $F[1]} = $F[0];
END {
$fmt = join "\t", map { qq/%${_}s/ } qw/ -10 1 1 /;
print sprintf $fmt, qw/ Day Name Phone /;
print "_" x 37;
for my $day ( map { uc($_ . day) } qw/ sun mon tues wednes thurs fri satur / ) {
print sprintf $fmt, $day, $Person_of{$day} || "Nobody", $Phone_of{$Person_of{$day}};
}
}
' project2.phone project2.day
Сначала мы заполняем хэш % Phone_of
ключами в качестве имен и значениями их телефонных номеров. Затем, когда @ARGV
обнуляется, т. Е. Обрабатывается последний файл (.day), мы заполняем хэш % Person_of
ключами в виде дня в верхнем регистре и значением в виде человека, работающего в этот день.
В блоке END {...}
, когда оба файла были обработаны, мы сначала устанавливаем строку формата и с ее помощью печатаем заголовок. Наконец, мы перебираем дни недели (в верхнем регистре) и отображаем день, человека, работающего в этот день (или никого, если в этот день никто не работает), и номер телефона человека.
Day Name Phone
_____________________________________
SUNDAY Tom (248)496-2204
MONDAY Nobody
TUESDAY Barry (313)123-4567
WEDNESDAY Alden (616)556-4458
THURSDAY Dave (734)838-9800
FRIDAY Carl (248)344-5576
SATURDAY Marci (313)449-1390
No whitespace(s) in the input files (*.phone, *.day)