Bash printf前缀

在Bash中,我可以使用printf来格式化一个string输出,如下所示: – (注意我为string添加了一个后缀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 

如果我想在string前缀,我可以这样做: –

 $ 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解决scheme将是适当的。

Solutions Collecting From Web of "Bash printf前缀"

我想出了这个:

 $ 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这样的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的解决方案,以保持壳内的东西,我不喜欢使用子壳,除非我真的需要它们。 而且一个子shell和一个管道的线似乎是不必要的。

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