我有一个包含数据的文件
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
...
问题是我试图跟上名称和年龄之间的间距,但由于名称长度的变化,'age'的位置不是我想要的位置(我使用/ t作为间距) 解决这个问题的最佳方法是什么?
我很抱歉,如果这已被问过千次了。(我花了一些时间搜索,但我猜我的搜索关键字很糟糕:()
由于
答案 0 :(得分: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
显然,50
和20
是示例 - 您应该选择适合您需求的尺寸。如果有必要,您甚至可以在第一遍中查看文件以找出最大的名称,然后使用第二遍中构造的格式字符串进行打印,但这可能有点过分。