awkを使用して可変数のフィールドを持つファイルの最初の列幅を変更する

awkを使用して可変数のフィールドを持つファイルの最初の列幅を変更する

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

おすすめ記事