本帖最后由 newswan 于 2024-7-21 20:35 编辑
支持全角字符
awk -f format-table.awk data.txt | function getWidth(str,LenStr,LenASC,LenHZ) { | | LenStr = length(str) | | LenASC = gsub( /[\x00-\x7F]/ , "" , str ) | | LenHZ = length(str) / length("一") | | return LenASC + LenHZ * 2 | | } | | | | function getLengthHZ(str,LenHZ) { | | gsub( /[\x00-\x7F]/ , "" , str ) | | LenHZ = length(str) / length("一") | | return LenHZ | | } | | | | BEGIN { | | FS = " " | | while ( getline < ARGV[1] ) { | | for (i = 1; i <= NF; i++) { | | len = getWidth($i) | | if ( len > maxWidth[i] ) { | | maxWidth[i] = len | | } | | } | | } | | | | | | | | | | | | | | } | | | | { | | for (i = 1; i <= NF; i++) { | | LenHZ = getLengthHZ($i) | | printf "%-*s:" , maxWidth[i] + LenHZ , $i | | } | | printf "\r\n" | | }COPY |
注意 第 35 行 由于 awk 环境不同,可能是 "+ LenHZ" 可能是 "- LenHZ" |