Если бы я хотел получить всю строку, я мог бы сделать это (основываясь на ответе FM):
perl -F\; -ane '$max{$ARGV} = $_ if /^22[78]/ and $F[1] >= (split /;/, $max{$ARGV})[1]; END{ print "$_\t$max{$_}" for sort keys %max}' *day.csv
Я нашел более короткое решение.
все файлы:
perl -F\; -anE '$max{$ARGV} = [@F] if /^22[78]/ and $F[1] >= $max{$ARGV}->[1]; END{ print "$_\t@{$max{$_}}" for sort keys %max}' *day.csv
один файл:
perl -F\; -anE '$max = [@F] if /^22[78]/ and $F[1] >= $max->[1]; END{ print "@$max" }' monday.csv
или если свободного места мало
perl -F\; -anE'$m{$ARGV}=[@F]if/^22[78]/&&$F[1]>=$$m{$ARGV}[1]}print"$_\t@{$m{$_}}"for sort keys%m;{' *day.csv
perl -F\; -anE'$m=[@F]if/^22[78]/&&$F[1]>=$$m[1]}print"@$m";{' monday.csv
Как показал Заид: чтобы получить последнюю строку с наибольшим значением в случае повторяющихся наивысших значений в файле, я изменил "$ F [1]> $ max ..." - часть на "$ F [1] > = $ max ".