假设,我有一个像这样的源文件.
ID|NAME|ADDRESS
1|ABC|PUNE
2|XYZA|MUMBAI
12|VB|NAGPUR
Run Code Online (Sandbox Code Playgroud)
我想获得每列的最大长度(不包括标题名称).输出应该是这样的.2 | 4 | 6
我试过这样的命令.tail +2 filename | 切-d"|" -f1 | awk'{print length}'| sort -r | uniq的
这适用于第1列.在awk中是否有任何选项可以获得每列的最大长度?
fed*_*qui 12
这可以是一般的方法,因此您不必关心您拥有的字段数:将长度存储在数组中并继续检查它是否是最大值.最后,循环遍历它们并打印结果.
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
Run Code Online (Sandbox Code Playgroud)
见输出:
$ 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
Run Code Online (Sandbox Code Playgroud)
对于可变数量的列,我们可以存储最大列数,例如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
Run Code Online (Sandbox Code Playgroud)