2011-05-23 182 views
0

我有一個數據AWK打印格式問題

number name    age sex 
102234 James_Mckenzie  21 M 
102233 Jim_Reil   24 M 
102235 Alan_Lightbrighter 19 M 

文件...

,我想打印出來的格式

number : 
name :     age : 
sex : 

所以基本上,打印輸出將是這樣的,

number : 102233 
name : Jim_Reil   age : 24 
sex : M 
number : 102235 
name : Alan_Lightbrighter  age : 19 
sex : M 
... 

該問題米是我試圖跟上名稱和年齡之間的間距,但由於變量名稱的長度,'年齡'的位置不是我想要的位置(我用/ t間距) 什麼是最好的方法解決這個問題?

我很抱歉,如果這已經被問一千次了。(我花了一些時間來尋找,但我想我的搜索關鍵詞吸:()

感謝

回答

1

,因爲不使用標籤的間距完全依賴於終端的變幻莫測

弄清最大的名稱很可能是和使用printf%-50s格式說明(寬50個字符,左對齊)上您的姓名,按照下面的成績單:

$ echo '1 pax X 
2 paxdiablo_with_a_very_long_name Y' | awk '{printf "%3d %-40s %s\n",$1,$2,$3}' 

    1 pax          X 
    2 paxdiablo_with_a_very_long_name   Y 

或者,更貼近您的需求:

$ echo '102234 James_Mckenzie  21 M 
102233 Jim_Reil   24 M 
102235 Alan_Lightbrighter 19 M' | awk ' 
    {printf "number : %d\nname : %-20s age : %d\nsex : %s\n",$1,$2,$3,$4}' 

number : 102234 
name : James_Mckenzie  age : 21 
sex : M 
number : 102233 
name : Jim_Reil    age : 24 
sex : M 
number : 102235 
name : Alan_Lightbrighter age : 19 
sex : M 

顯然,5020的例子 - 你應該選擇一個大小適合您的需要。如果有必要的話,你甚至可以在第一遍時通過該文件來計算出最大的名字,然後使用第二遍中構建的格式字符串進行打印,但這可能是矯枉過正的。

+0

哇,非常感謝! – Todd 2011-05-23 02:53:00