Printing AWK打印格式问题
我有一个包含数据的文件Printing AWK打印格式问题,printing,escaping,awk,Printing,Escaping,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 n
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表示间距)
解决此问题的最佳方法是什么
如果这个问题已经被问了上千次,我很抱歉。(我花了一些时间搜索,但我猜我的搜索关键词很糟糕:()
谢谢不要使用制表符作为间距,因为这完全取决于终端的变化 找出最大的名称可能是什么,并使用
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
就是一个例子——你应该选择一个适合你需要的大小。如果必要的话,你甚至可以在第一次遍历文件时计算出最大的名称,然后在第二次遍历时使用由该文件构造的格式字符串进行打印,但这可能有些过分了