希望の形式の出力でサーマル印刷

希望の形式の出力でサーマル印刷

私のファイルには次のデータのリストがあります。

    -0.3476890000000000
    0.0743938333333333
    -1.0990240000000000
    0.0743938333333333
    -0.2169100000000000
    0.0879397500000000

すべてのデータを次のようにソートしようとしています。

    -0.347689000000000
    0.0743938333333333
    -1.099024000000000
    0.0743938333333333
    -0.216910000000000
    0.0879397500000000

残念ながら私はこれを行うことはできませんawk '{printf "%18s\n", $1}'。理想的な出力は次のとおりです。

   -0.3476890000000000
    0.0743938333333333
   -1.0990240000000000
    0.0743938333333333
   -0.2169100000000000
    0.0879397500000000

答え1

フィールドの幅が小さすぎる場合があります。努力する

awk '{printf "%19s\n", $1}' file
-0.3476890000000000
 0.0743938333333333
-1.0990240000000000
 0.0743938333333333
-0.2169100000000000
 0.0879397500000000

答え2

GNU Awk(gawk)と両方が正の前にスペースを追加して負の数と整列するmawkC修飾子をサポートしているようです。printf ' '

   ' '    (a  space)  A  blank should be left before a positive number (or
          empty string) produced by a signed conversion.

たとえば、

$ mawk '{printf "% 22.16f\n", $1}' file
   -0.3476890000000000
    0.0743938333333333
   -1.0990240000000000
    0.0743938333333333
   -0.2169100000000000
    0.0879397500000000

またはnumfmt

$ numfmt --format='% 22.16f' < file
   -0.3476890000000000
    0.0743938333333333
   -1.0990240000000000
    0.0743938333333333
   -0.2169100000000000
    0.0879397500000000

答え3

以下も使用できますprintf(1)

xargs <file printf '%19.16f\n'
-0.3476890000000000
 0.0743938333333333
-1.0990240000000000
 0.0743938333333333
-0.2169100000000000
 0.0879397500000000

または入力ファイルが大きすぎない場合は、シェルを埋め込むprintf

undef IFS
printf '%19.16f\n' $(cat file)

関連情報