本帖最后由 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
- }
- }
- }
- # print "--maxWidth--"
- # for ( i in maxWidth ) {
- # printf "%4s" , maxWidth[i]
- # }
- # printf "\r\n"
- # print "----"
- }
-
- {
- for (i = 1; i <= NF; i++) {
- LenHZ = getLengthHZ($i)
- printf "%-*s:" , maxWidth[i] + LenHZ , $i
- }
- printf "\r\n"
- }
复制代码 注意 第 35 行 由于 awk 环境不同,可能是 "+ LenHZ" 可能是 "- LenHZ" |