Tôi hiểu cách sử dụng chức năng printf của awk, nhưng tôi không muốn chỉ định mọi trường.
Ví dụ: giả sử đây là tệp của tôi:
c1|c2|c3|c4|c5
c6|c7|c8|c9|c10
c11|c12|c13|c14|c15
Tôi muốn định dạng nó sao cho trường đầu tiên của mỗi bản ghi là chiều rộng của c11 - ô dài nhất trong trường đầu tiên:
c1 |c2|c3|c4|c5
c6 |c7|c8|c9|c10
c11|c12|c13|c14|c15
Tôi hiểu rằng tôi có thể chỉ định:
awk -F"|" '{printf "%-3s%s%s%s%s\n", $1, $2, $3, $4, $5}' file > newfile
Giả sử tôi biết tôi muốn chiều rộng của cột đầu tiên là bao nhiêu, nhưng tôi KHÔNG biết có bao nhiêu trường trong tệp. Về cơ bản tôi muốn làm một cái gì đó như:
... '{printf "%-3s|", $1}'
... Và sau đó in phần còn lại của các trường ở định dạng ban đầu của chúng.
sed 's/|/'' '' '' |/;s/\(...\) */\1/'
(ở đây thêm dấu ngoặc kép phụ để chèn những 3 không gian như các ý kiến SE bóp không gian liền kề thành một)