printf列对齐问题



有人可以帮助我了解printf的对齐功能。我尝试阅读有关堆栈和一般Google结果的几个示例,但我仍然很难理解其语法。本质上,这是我要实现的目标:

HOLDING    1.1.1.1              Hostname        Potential outage!
SKIPPING   1:1:1:1:1:1:1:1      Hostname        Existing outage!

很抱歉,我知道这比我通常的问题更是讲义。我真的不知道该如何从这里开始。过去,我曾尝试使用Echo -e" t",用于水平放置,但不适合对齐。我还使用for loop合并了一个更复杂的TCUP解决方案,但这在这种情况下不容易起作用。

我刚刚发现了printf的功能,似乎它会做我需要的东西,但我不了解语法。也许是这样的?

A="HOLDING"
B="1.1.1.1"
C="Hostname"
D="Potential outage"
for (( j=1; j<=10; j++ )); do 
  printf "%-10s" $A $B $C $D
  echo "n"
done

这些变量将从DB中馈入。我仍然不太了解printf语法吗?请帮助

*也 *

主题问题,您回应的动力是什么?我是堆栈交换的新手。除了声誉之外,你们中的某些人都从中得到了什么。职业2.0?或者是其他东西?有些人在此网站上有荒谬的统计数据。只是好奇驱动器是什么。

字符串%-10s可以分为多个部分:

  • %引入了转换说明符,即如何格式化参数
  • -指定该字段应对齐。
  • 10指定字段宽度
  • s指定数据类型,字符串。

bash printf格式字符串模仿c库函数 printf(3)的字符串,该部分在 man 3 printf中进行了描述。

此外,BASH printf比转换说明符更多的参数将为每个参数打印多次字符串,因此printf "%-10s" foo bar等于printf "%-10s" foo; printf "%-10s" bar。这就是让您在同一命令上指定所有参数,而%-10s适用于每个命令。

至于人们的动机,您可以尝试使用元网站,该网站致力于堆叠的问题。

相关内容

  • 没有找到相关文章

最新更新