Chinaunix

标题: 用awk怎样求出某一列的最大列宽 [打印本页]

作者: daming31    时间: 2009-09-10 08:42
标题: 用awk怎样求出某一列的最大列宽
# cat file
aaa123
bbb1234
ccc1234567

如何能用awk求出这一列的最大宽度是10个字符?

其实这个问题是由另一个问题引出来的,
2009-08-09,     Sun     00:01:02        0735huyh                ip:134.165.11.2
2009-08-09,     Sun     00:01:51        0746jqls                ip:134.172.68.253
2009-08-09,     Sun     00:05:15        0730tx          ip:134.170.77.177
2009-08-09,     Sun     00:09:38        0735huyh                ip:134.165.11.2
2009-08-09,     Sun     00:12:54        0735xujy                ip:134.165.176.106
2009-08-09,     Sun     00:13:04        0736yangj2              ip:134.166.169.79
2009-08-09,     Sun     00:16:48        0746nyayy            ip:134.172.68.246
2009-08-09,     Sun     00:18:27        why             ip:134.160.98.6
上面这段记录每个域是由/t即tab键分开的,但因为第四个域长短不一,所以导到第五个域显示不是很齐。
当然我用awk中的printf指定一下那几个域外的列宽,这个问题就貌似解决了,
# awk '{printf("%s\t%s\t%s\t%-25s%-25s\n",$1,$2,$3,$4,$5)}' file                  
2009-08-09,     Sun     00:01:02        0735huyh       ip:134.165.11.2         
2009-08-09,     Sun     00:01:51        0746jqls         ip:134.172.68.253        
2009-08-09,     Sun     00:05:15        0730tx            ip:134.170.77.177        
2009-08-09,     Sun     00:09:38        0735huyh       ip:134.165.11.2         
2009-08-09,     Sun     00:12:54        0735xujy        ip:134.165.176.106      
2009-08-09,     Sun     00:13:04        0736yangj2    ip:134.166.169.79        
2009-08-09,     Sun     00:16:48        0746nyayy      ip:134.172.68.246        
2009-08-09,     Sun     00:18:27        why                 ip:134.160.98.6     
但因为我不能确定第四个域中的最长的那条记录是多少个符,所以就不得不在printf时指定一个比较长的字符宽度。但这样还是不确定,即万一实际上最长的那个记录的字符宽度比我指定的还长,那显示就会在某一行又不对齐了。

不知道兄弟们在处理这种情况时有什么好方法吗?向大家请教了。
作者: Minsic    时间: 2009-09-10 09:15
看着看着就被绕晕了

如果是只是某列的最大列宽的话可以这么做:

  1. awk '{if(length($1)>s){s=length($1);l=NR}}END{print "line: "l",length: "s}' file
复制代码

作者: Minsic    时间: 2009-09-10 09:17
想了想,是不是楼主想要的只是column -t file这样的显示效果?
作者: daming31    时间: 2009-09-10 09:36
标题: 回复 #3 Minsic 的帖子
3Q Minsic
awk的这个length函数是要好好用一下的,用来求某一列数据的最大列宽还是很多的。
作者: daming31    时间: 2009-09-11 10:07
标题: 回复 #3 Minsic 的帖子
原来用column -t file来格式化输入更方便。
太酷了
超级3Q Minsic




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2