Formatando texto em colunas

8

Eu tenho um arquivo com duas colunas, conforme mostrado abaixo (exemplo):

ARQUIVO 1:

John 1
Peter 2
Michael Rod 3
Su 7
Louise 9

Eu preciso formatar isso e minha saída esperada deve ser:

ARQUIVO 1:

John        1
Peter       2
Michael Rod 3
Su          7
Louise      9
    
por Ram 16.01.2017 / 12:29

1 resposta

15

Se a entrada tivesse sido apenas duas colunas, eu teria sugerido usar column -t . Isso não funciona aqui, já que o utilitário column tratará qualquer número de espaços ou tabulações como delimitadores de coluna:

$ column -t file1
John     1      
Peter    2      
Michael  Rod  3 
Su       7      
Louise   9      

"Michael Rod" é duas colunas, de forma que uma única linha tenha uma coluna a mais do que as outras linhas, o que estraga a saída.

Podemos resolver isso inserindo um caractere de tabulação antes da última coluna e, em seguida, deixar column usar (apenas) como delimitador:

$ awk '{ $NF = "\t" $NF; print }' file1 | column -t -s $'\t'
John          1
Peter         2
Michael Rod   3
Su            7
Louise        9

No Awk, NF é o número de campos (colunas) e $NF são os dados no último campo. O script que estou usando simplesmente modifica os dados do último campo, prefixando um caractere de tabulação, antes de imprimir a linha completa.

Se o seu shell não entender $'\t' , você poderá escolher outro caractere que não faça parte dos dados:

awk '{ $NF = "@" $NF; print }' file1 | column -t -s '@'
John          1
Peter         2
Michael Rod   3
Su            7
Louise        9
    
por 16.01.2017 / 12:53