Преобразовать вывод Unix `cal` в код таблицы латекса: однострочное решение?

Я изо всех сил пытался достичь следующего:

Преобразовать вывод Unix cal в код таблицы латекса, используя короткий и приятный однострочник (или несколько- лайнер).

Например, cal -h 02 2012 | $ magicline должен дать

Mo      &Tu     &We     &Th     &Fr     \\
        &       & 1     & 2     & 3     \\
 6      & 7     & 8     & 9     &10     \\
13      &14     &15     &16     &17     \\
20      &21     &22     &23     &24     \\
27      &28     &       &       &       \\

Единственное разумное решение, которое я мог придумать, было

cal -h | sed -r -e '1d' -e \
  's/^(..)?(...)?(...)?(...)?(...)?(...)?(...)?$/\2\t\&\3\t\&\4\t\&\5\t\&\6\t\\\\/'

... и я очень старался. Приятно то, что он несложный и легкий для понимания, а недостаток - то, что он «негибкий» (он не может справиться с неделей из 8 дней) и немного многословен. Я ищу альтернативные решения, чтобы учиться; -)

РЕДАКТИРОВАТЬ: Нашел еще один, который кажется приемлемым

cal -h | tail -n +2 |
    perl -ne 'chomp;
        $,="\t&";
        $\="\t\\\\\n";
        $line=$_;
        print map {substr($line,$_*3,3)} (1..5)'

РЕДАКТИРОВАТЬ: Хороший:

cal -h | perl \
    -F'(.{1,3})' -ane \
        'BEGIN{$,="\t&";$\="\t\\\\\n"}
            next if $.==1;
            print @F[3,5,7,9,11]'
5
задан agc 27 May 2017 в 13:05
поделиться