這可以是一個普通的方式這樣做,所以你不必關心你有多少字段:將長度存儲在一個數組中,並檢查它是否是最大值。最後,通過它們循環並打印結果。
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