Quando seus dados são delimitados por : :
perl -F'[:]' -lane '
push @e, join $", splice @F, -1;
push @A, join $", @F;
length($A[-1]) > $maxW and $maxW = length($A[-1])}{
print $_, $" x ($maxW - length), "\t", shift @e for @A;
' file
Resultados
alice bob cathy david elon
unix linux bsd
quando quiser que os dois últimos elementos sejam separados, altere a -1 na lista de argumentos splice para -2 , resultando em:
alice bob cathy david elon
unix linux bsd
Explicação
- Mantenha a matriz
@eque contém os últimos elementos em Nth para cada linha. - Mantenha a matriz
@Aque contém cada linha depois que os últimos N elementos foram removidos da linha atual. - Determinamos a largura máxima dessas linhas removidas.
- Depois de todas as linhas terem sido lidas, imprimimos cada linha removida + espaços diferenciais de modo que os comprimentos das linhas de corte sejam equalizados (depois dos espaços de preenchimento à direita) + os elementos TAB + últimos-N.