这可以是一个普通的方式这样做,所以你不必关心你有多少字段:将长度存储在一个数组中,并检查它是否是最大值。最后,通过它们循环并打印结果。
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
由于fedorqui。 它适合我。 – Vicky
@fedorqui如果每行有相同数量的字段,那么可能会输出正确的输出,如果最后一行没有输出,该怎么办? –
@ZsoltBotykai如果是这样,我们可以存储最大NF和循环的基础上。查看更新。 – fedorqui