2014-01-19 57 views
1

有人可以帮助我理解printf的对齐功能。我曾尝试阅读关于Stack和一般Google结果的几个示例,但我仍然无法理解其语法。这里基本上是我想要实现:printf列对齐问题

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

我很抱歉,我知道这是一个更比施舍我平常的问题的。我真的不知道如何从这里开始。我曾尝试在过去使用echo -e“\ t”,它适用于水平放置,但不对齐。我还使用for循环引入了一个更加复杂的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 

这些变量将从一个数据库喂入,但是。我仍然不明白printf语法?请帮助

*也*

题外话的问题,你有什么应对的激励?我对堆栈交换相当陌生。除了声誉之外,你们有没有得到任何东西?职业2.0?或者是其他东西?有些人在这个网站有荒谬的统计资料。只是好奇驱动器是什么。

+1

关于声誉的问题最好在[Meta Stack Overflow](http://meta.stackoverflow.com/)网站上提问。回应的动机是声誉,以及帮助他人的满意度。有些人可能因为在SO上拥有很高的声誉而获得了新的工作机会,但这不是一个追求新工作的可靠方式。 –

+0

还有其他论坛,人们互相帮助。 comp.lang。* usenet组和像javaranch.com这样的网站。在我看来,声誉是非常巧妙和无价的。缺乏声誉,你会减少接听和巡逻的人,而且你也会得到不同类型的“答案”,如其他论坛所见。它通常以“你想做什么”开头。在他们回答你的问题之前,你会从一个语言知情者的角度得到一个演讲。你可能只会听讲座。声誉将它变成一场竞赛,演讲部分将尽量减少。 – Scooter

回答

2

字符串%-10s可以被分解成多个部分:

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

printf击格式字符串模仿那些C库函数printf(3)的,这部分在man 3 printf说明。

此外,Bash printf在给出比转换说明符多的参数时,将为每个参数多次打印该字符串,以便printf "%-10s" foo bar等效于printf "%-10s" foo; printf "%-10s" bar。这就是让你指定同一个命令的所有参数,%-10s适用于它们中的每一个。

至于人们的动机,你可以试试meta site,它专门讨论关于计算器本身的问题。

+0

这有帮助,但我仍然没有任何运气。你能举个例子吗? – Atomiklan