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 column
Dienstprogramm 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 NF
ist die Anzahl der Felder (Spalten) und $NF
die 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