UNIXの小数点中心列

UNIXの小数点中心列

すべての浮動小数点数が小数点に基づいて中央になるように、awkまたは他のUNIXツールを使用して3番目の列を右揃えにしたいと思います。

Al     11.134  15.250 2.393
Al     11.134  5.825 2.393
Al     12.888  10.537 2.393

提案があれば教えてください。書式設定方法を試しましたが、浮動小数点では機能しないようです。

したがって、予想される出力は次のようになります。

Al     11.134  15.250 2.393
Al     11.134   5.825 2.393
Al     12.888  10.537 2.393

答え1

アッ解決策:

awk '{ for(i=1;i<=NF;i++) printf (i==1?"%s%s":"%6s%s"),$i,(i==NF? ORS:OFS) }' file

出力:

Al 11.134 15.250  2.393
Al 11.134  5.825  2.393
Al 12.888 10.537  2.393

答え2

ファイル z6 の入力データのコードは次のとおりです。

align z6

生産する:

Al 11.134 15.250  2.393
Al 11.134  5.825  2.393
Al 12.888 10.537  2.393

(perl)コードソートの詳細:

align   Align columns of text. (what)
Path    : ~/p/stm/common/scripts/align
Version : 1.7.0
Length  : 270 lines
Type    : Perl script, ASCII text executable
Shebang : #!/usr/bin/perl
Help    : probably available with --help
Home    : http://kinzler.com/me/align/ (doc)
Modules : (for perl codes)
 Getopt::Std    1.10

そのようなシステムでは:

OS, ker|rel, machine: Linux, 3.16.0-4-amd64, x86_64
Distribution        : Debian 8.9 (jessie) 
bash GNU bash 4.3.30
align 1.7.0

頑張って...乾杯、drl

答え3

awkこれは 's ステートメントを使用して行うことができますprintf

"%2.3f"うまくいかない理由は%f<field-width>.<precision>次のとおりです。フィールド幅小数点と小数部を含むフィールドの全幅。 <precision>小数点以下の桁数です。

入力するときは、%2.3f小数点の左に2桁、右に3桁が必要です。これを達成するには、%6.3f小数点の左側に2桁以下の数字がある限り、小数点をソートするを使用します。

次のことを試すことができます。

awk '{ printf "%-6s ", $1; for (i=2; i<=NF; i++) printf "%6.3f ", $i; printf "\n"; }'

以下は、読みやすくするためにフォーマットされ、サンプルデータを使用して実行されるのと同じコードです。入力データがフィールドの幅より長い場合に書式設定の動作を確認できるように、いくつかの追加データを追加しました。

$ awk '
    {
        printf "%-6s ", $1;
        for (i = 2; i <= NF; i++)
            printf "%6.3f ", $i;
        printf "\n";
    }
' <<EOF
Al     11.134  15.250 2.393
Al     11.134  5.825 2.393                                                                                                             
Al     12.888  10.537 2.393
Bundy  1.1 1.22 1.333
Jr     22.333 22.1 0.0
Longman 333.4444 4444.0 1.55555
EOF
Al     11.134 15.250  2.393 
Al     11.134  5.825  2.393 
Al     12.888 10.537  2.393 
Bundy   1.100  1.220  1.333 
Jr     22.333 22.100  0.000 
Longman 333.444 4444.000  1.556
$

詳しくは、およびマニュアルページを参照してくださいawkprintf(3)

関連情報