繁体   English   中英

Bash printf前缀

[英]Bash printf prefix

在Bash中,我可以使用printf来格式化这样的字符串输出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解决方案都是合适的。

我想出了这个:

$ 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

不可能。 您需要类似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

虽然我喜欢ormaaj将事物保留在外壳中的解决方案,但除非我真的需要它们,否则我不喜欢使用子外壳。 而同时具有子壳和管道的线似乎……是不必要的。

$ printf "Rate: %11.1f\n" 123 | sed 's/  \([0-9]\)/$ \1/'
Rate:     $ 123.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM