2011-05-23 124 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