Nếu đầu vào chỉ có hai cột, tôi đã đề nghị sử dụng column -t
. Điều này không hoàn toàn hoạt động ở đây mặc dù vì column
tiện ích sẽ coi bất kỳ số lượng khoảng trắng hoặc tab nào là dấu phân cách cột:
$ column -t file1
John 1
Peter 2
Michael Rod 3
Su 7
Louise 9
"Michael Rod" là hai cột, do đó, một hàng có nhiều hơn một cột so với các hàng khác, làm rối loạn đầu ra.
Chúng ta có thể giải quyết vấn đề này bằng cách chèn một ký tự tab trước cột cuối cùng và sau đó cho phép column
sử dụng (chỉ) làm dấu phân cách:
$ awk '{ $NF = "\t" $NF; print }' file1 | column -t -s $'\t'
John 1
Peter 2
Michael Rod 3
Su 7
Louise 9
Trong Awk, NF
là số lượng trường (cột) và $NF
là dữ liệu trong trường cuối cùng. Tập lệnh tôi đang sử dụng chỉ đơn giản là sửa đổi dữ liệu của trường cuối cùng bằng cách thêm vào một ký tự tab, trước khi in dòng hoàn chỉnh.
Nếu trình bao của bạn không hiểu $'\t'
, thì bạn có thể chọn một ký tự khác không phải là một phần của dữ liệu:
awk '{ $NF = "@" $NF; print }' file1 | column -t -s '@'
John 1
Peter 2
Michael Rod 3
Su 7
Louise 9