すべての浮動小数点数が小数点に基づいて中央になるように、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
$
詳しくは、およびマニュアルページを参照してくださいawk
。printf(3)