2014-01-19 87 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