gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:22:28 29 4
gpt4 key购买 nike

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

ID|NAME|ADDRESS
1|ABC|PUNE
2|XYZA|MUMBAI
12|VB|NAGPUR


我想获得每列的最大长度(标题名称除外)。
输出应该是这样的。
2 | 4 | 6

我已经尝试过这样的命令。
尾部+2文件名|切-d“ |” -f1 | awk'{打印长度}'|排序-r |优衣库

这适用于第一列。 awk中有没有可用的选项来获取每一列的最大长度?

最佳答案

这可能是一种通用的方法,因此您不必关心所拥有的字段数:将长度存储在数组中,并继续检查是否为最大值。最后,遍历它们并打印结果。

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

关于unix - 如何获得Unix中每列的最大长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24653785/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com