0

Bash ではprintf、次のように文字列出力をフォーマットするために使用できます:- (W文字列に接尾辞を追加した方法と、これがパディングに含まれていないことに注意してください)

$ printf "Blah %11.1fW\n" 123 456 78965 5 56
Blah       123.0W
Blah       456.0W
Blah     78965.0W
Blah         5.0W
Blah        56.0W

文字列にプレフィックスを付けたい場合は、これを行うことができます:-

$ printf "Blah £%11.1f\n" 123 456 78965 5 56
Blah £      123.0
Blah £      456.0
Blah £    78965.0
Blah £        5.0
Blah £       56.0

ただし、これによりプレフィックスの前にパディングが適用されることに注意してください。

printf出力が次のようになるように、パディングの前に値の前にどのように使用しますか (可能な場合) :-

Blah      £ 123.0
Blah      £ 456.0
Blah    £ 78965.0
Blah        £ 5.0
Blah       £ 56.0

不可能な場合は、Bash ソリューションが適切です。

4

3 に答える 3

4

私はこれを思いついた:

$ printf "Rate: %11s\n" $(printf "$%.1f " 12345 123)
Rate:    $12345.0
Rate:      $123.0

ケースに合ったものを選択し%11sてください。


あなたはそのスペースの問題に自分で取り組んだようです。完全を期すために、ここに入れておきます。

$ printf "Rate: %11s\n" $(printf "$%.1f " 12345 123) | sed 's/\$/\$ /g'
Rate:    $ 12345.0
Rate:      $ 123.0

@FatalErrorによって与えられた解決策は次のとおりです。

printf "Rate: %11b\n" $(printf '$\\0040%.1f ' 12345 123)
Rate:   $ 12345.0
Rate:     $ 123.0
于 2012-07-05T10:36:02.577 に答える
3

ありえない。のようなものが必要ですstrfmon。回避策:

$ a=(123 456 78965 5 56)
$ printf 'blah %*s %.1f\n' {,,,,}{$((10 - ${#a[n]})),£,"${a[n++]}"}
blah      £ 123.0
blah      £ 456.0
blah    £ 78965.0
blah        £ 5.0
blah       £ 56.0
于 2012-07-05T11:16:32.403 に答える
2

私はシェル内に何かを保持するための ormaaj のソリューションが大好きですが、本当に必要でない限り、サブシェルを使用するのは好きではありません。そして、サブシェルとパイプの両方を含む行は...不必要に思えます。

$ printf "Rate: %11.1f\n" 123 | sed 's/  \([0-9]\)/$ \1/'
Rate:     $ 123.0
于 2012-07-06T10:58:29.967 に答える