Se a entrada tivesse sido apenas duas colunas, eu teria sugerido o uso column -t
. Porém, isso não funciona aqui, pois o column
utilitário tratará qualquer número de espaços ou guias como delimitadores de coluna:
$ column -t file1
John 1
Peter 2
Michael Rod 3
Su 7
Louise 9
"Michael Rod" é duas colunas, de modo que uma única linha tem uma coluna a mais que as outras linhas, o que atrapalha a saída.
Podemos contornar isso, inserindo um caractere de tabulação antes da última coluna e, em seguida, vamos column
usar (apenas) isso como um 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
os dados no último campo. O script que estou usando simplesmente modifica os dados do último campo, acrescentando um caractere de tabulação antes de imprimir a linha completa.
Se 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