首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得unix中每列的最大长度?

如何获得unix中每列的最大长度?
EN

Stack Overflow用户
提问于 2014-07-09 12:31:18
回答 2查看 16.8K关注 0票数 3

假设,我有这样一个源文件。

代码语言:javascript
复制
ID|NAME|ADDRESS
1|ABC|PUNE
2|XYZA|MUMBAI
12|VB|NAGPUR

我希望得到每一列的最大长度(不包括标题名称)。输出应该是这样的。2-4-6

我已经试过这样做了。尾巴+2文件名剪切-d“-f1”\ awk '{打印长度}‘{ -r排序-r uniq

这适用于第一栏。在awk中有任何选项可以获得每列的最大长度吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-09 12:46:22

这可以是一种通用的方法,这样您就不必关心您有多少字段:将长度存储在一个数组中,并不断检查它是否是最大的。最后,循环它们并打印结果。

代码语言:javascript
复制
awk -F'|' 'NR>1{for (i=1; i<=NF; i++) max[i]=(length($i)>max[i]?length($i):max[i])}
           END {for (i=1; i<=NF; i++) printf "%d%s", max[i], (i==NF?RS:FS)}' file

见产出:

代码语言:javascript
复制
$ awk -F'|' 'NR>1{for (i=1; i<=NF; i++) max[i]=(length($i)>max[i]?length($i):max[i])} END {for (i=1; i<=NF; i++) printf "%d%s", max[i], (i==NF?RS:FS)}' a
2|4|6

对于可变列数,可以将最大列数量存储在例如cols中。

代码语言:javascript
复制
$ awk -F'|' 'NR>1{cols=(cols<=NF?NF:cols); for (i=1; i<=NF; i++) max[i]=(length($i)>max[i]?length($i):max[i])} END {for (i=1; i<=cols; i++) printf "%d%s", max[i], (i==cols?RS:FS)}' a
2|4|6
票数 14
EN

Stack Overflow用户

发布于 2014-07-09 12:40:22

这可能适用于您(但是如果有许多字段,我会使用for循环和数组来存储字段的长度.):

代码语言:javascript
复制
awk -F '|' 'NR>1 {if ( length($1) > l1 ) { l1=length($1) }
                  if ( length($2) > l2 ) { l2=length($2) }
                  if ( length($3) > l2 ) { l3=length($3) }
                 }
             END { print l1 "|" l2 "|" l3 }' INPUTFILE
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24653785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档