複数の列にawk '{printf ...'を使用する

複数の列にawk '{printf ...'を使用する

複数の熱印刷を使用するにはawk '{printf...?それによってawk '{print...容易です:

$ printf bar\\t5 | awk '{print $2,"baz",$1}'
5 baz bar

ただし、特定の小数点以下の桁数を表示するように数値書式を指定したい場合は、他の列が消えます。

$ printf bar\\t5 | awk '{printf "%.3f\n", $2,"baz",$1}'
5.000

printf書式設定したい各列の前にステートメントを配置しようとしましたが、これにより構文エラーが発生しました。

$ printf bar\\t5 | awk '{printf "%.3f\n",$2, printf "%4s\n","baz", $1}'
awk: cmd. line:1: {printf "%.3f\n",$2, printf "%s\n","baz", $1}
awk: cmd. line:1:                      ^ syntax error

または、printf各列の前に書式文字列はありません。

$ printf bar\\t5 | awk '{printf "%.3f\n",$2,"%4s\n","baz", $1}'
5.000

を使用するときにすべての列を表示する方法はawk '{printf...

ベストアンサー1

このprintfコマンドを使用するには、すべての書式文字列が最初に各出力列に1つずつ来る必要があり、次に各列に1つずつ入力%の列を参照できます。,

$ printf bar\\t5 | awk '{printf "%.3f,%4s|%s\n", $2,"baz",$1}'
5.000, baz|bar

書式文字列では、書式文字列に続く入力列とまったく同じ数の出力列を参照する必要があります。それ以外の場合はエラーが発生します(この場合、出力形式には3つの列がありますが、入力列は2つしかありません)。 ):

$printf bar\\t5 | awk '{printf "%.3f,%4s|%s\n", $2,"baz"}'
awk: cmd. line:1: (FILENAME=- FNR=1) fatal: not enough arguments to satisfy format string
        `%.3f,%4s|%s
'
                  ^ ran out for this one

書式文字列の区切り文字はリテラルで、書式文字列の後にコンマを使用して入力列を記述します。

おすすめ記事