免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2926 | 回复: 4
打印 上一主题 下一主题

用awk怎样求出某一列的最大列宽 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-10 08:42 |只看该作者 |倒序浏览
# 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时指定一个比较长的字符宽度。但这样还是不确定,即万一实际上最长的那个记录的字符宽度比我指定的还长,那显示就会在某一行又不对齐了。

不知道兄弟们在处理这种情况时有什么好方法吗?向大家请教了。

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
2 [报告]
发表于 2009-09-10 09:15 |只看该作者
看着看着就被绕晕了

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

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

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
3 [报告]
发表于 2009-09-10 09:17 |只看该作者
想了想,是不是楼主想要的只是column -t file这样的显示效果?

论坛徽章:
0
4 [报告]
发表于 2009-09-10 09:36 |只看该作者

回复 #3 Minsic 的帖子

3Q Minsic
awk的这个length函数是要好好用一下的,用来求某一列数据的最大列宽还是很多的。

论坛徽章:
0
5 [报告]
发表于 2009-09-11 10:07 |只看该作者

回复 #3 Minsic 的帖子

原来用column -t file来格式化输入更方便。
太酷了
超级3Q Minsic
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP