Disposição da coluna ao lado da última Nth instance of delimiter

0

Eu tenho os seguintes dados no meu file

alice bob cathy david elon
unix linux bsd

Eu quero produzir com apenas a última enésima instância do delimitador (ou seja, um espaço) sendo organizada

Como para a última instância do delimitador (espaço)

alice bob cathy david     elon
unix linux                bsd

ou para segunda última instância do delimitador (espaço)

alice bob cathy     david elon
unix                linux bsd
    
por GypsyCosmonaut 20.07.2017 / 13:35

1 resposta

1

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.
por 20.07.2017 / 14:31

Tags