Wenn die Eingabe nur zwei Spalten gewesen wäre, hätte ich vorgeschlagen, zu verwenden column -t. Dies funktioniert hier jedoch nicht ganz, da das columnDienstprogramm eine beliebige Anzahl von Leerzeichen oder Tabulatoren als Spaltenbegrenzer behandelt:
$ column -t file1
John 1
Peter 2
Michael Rod 3
Su 7
Louise 9
"Michael Rod" besteht aus zwei Spalten, sodass eine einzelne Zeile eine Spalte mehr als die anderen Zeilen enthält, was die Ausgabe durcheinander bringt.
Wir können dies umgehen, indem wir vor der letzten Spalte ein Tabulatorzeichen einfügen und dieses dann column(nur) als Trennzeichen verwenden:
$ awk '{ $NF = "\t" $NF; print }' file1 | column -t -s $'\t'
John 1
Peter 2
Michael Rod 3
Su 7
Louise 9
In Awk NFist die Anzahl der Felder (Spalten) und $NFdie Daten im letzten Feld. Das von mir verwendete Skript ändert einfach die Daten des letzten Felds, indem ein Tabulatorzeichen vorangestellt wird, bevor die gesamte Zeile gedruckt wird.
Wenn Ihre Shell nicht versteht $'\t', können Sie ein anderes Zeichen auswählen, das nicht Teil der Daten ist:
awk '{ $NF = "@" $NF; print }' file1 | column -t -s '@'
John 1
Peter 2
Michael Rod 3
Su 7
Louise 9