[英]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.