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
@e
que contém os últimos elementos em Nth para cada linha. - Mantenha a matriz
@A
que 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.