awkのprintf機能の使い方を理解していますが、すべてのフィールドを指定したくありません。
たとえば、これが私のファイルであるとします。
c1|c2|c3|c4|c5
c6|c7|c8|c9|c10
c11|c12|c13|c14|c15
各レコードの最初のフィールド幅がc11(最初のフィールドで最も長いセル)になるようにフォーマットしたいと思います。
c1 |c2|c3|c4|c5
c6 |c7|c8|c9|c10
c11|c12|c13|c14|c15
以下を指定できることがわかります。
awk -F"|" '{printf "%-3s%s%s%s%s\n", $1, $2, $3, $4, $5}' file > newfile
最初の列の幅はわかりますが、ファイルにいくつかのフィールドがあるかどうかわからないとします。基本的に次のようなことをしたいと思います。
... '{printf "%-3s|", $1}'
...その後、残りのフィールドを元の形式で印刷します。
ベストアンサー1
sprintf
再フォーマットのみ使用できます$1
。
前任者。
$ awk 'BEGIN{OFS=FS="|"} {$1 = sprintf("%-3s",$1)} 1' file
c1 |c2|c3|c4|c5
c6 |c7|c8|c9|c10
c11|c12|c13|c14|c15