假设,我有这样一个源文件。
ID|NAME|ADDRESS
1|ABC|PUNE
2|XYZA|MUMBAI
12|VB|NAGPUR我希望得到每一列的最大长度(不包括标题名称)。输出应该是这样的。2-4-6
我已经试过这样做了。尾巴+2文件名剪切-d“-f1”\ awk '{打印长度}‘{ -r排序-r uniq
这适用于第一栏。在awk中有任何选项可以获得每列的最大长度吗?
发布于 2014-07-09 12:46:22
这可以是一种通用的方法,这样您就不必关心您有多少字段:将长度存储在一个数组中,并不断检查它是否是最大的。最后,循环它们并打印结果。
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见产出:
$ 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中。
$ 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发布于 2014-07-09 12:40:22
这可能适用于您(但是如果有许多字段,我会使用for循环和数组来存储字段的长度.):
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 }' INPUTFILEhttps://stackoverflow.com/questions/24653785
复制相似问题