1. AWK 常用内置变量 - NR 已读的记录数 - NF 记录域个数. 利用NR读取文件的行数 awk 'END {print NR}' test.txt 文件行数>0执行,否则不予执行 awk '{if (NR>0) print $0}' test.txt 2. AWK 内置的字符串函数 gsub ( r, s ) 在整个$ 0中用s替代r gsub ( r, s , t ) 在整个t中用s替代r index ( s , t ) 返回s中字符串t的第一位置 length ( s ) 返回s长度 match ( s , r ) 测试s是否包含匹配r的字符串 split( s , a , f s ) 在f s上将s分成序列a sprint ( f m t , e x p ) 返回经f m t格式化后的e x p sub ( r, s ) 用$ 0中最左边最长的子串代替s substr ( s , p ) 返回字符串s中从p开始的后缀部分 substr ( s , p , n ) 返回字符串s中从p开始长度为n的后缀部分 3. AWK 字符串 屏蔽序列 /b 退格键 /t tab键 /f 走纸换页 /ddd 八进制值 /n 新行 /c 任意其他特殊字符,例如/ /为反斜线符号 /r 回车键 4. AWK printf 语法: printf 'format'[,] str 中间的 分隔符 逗号, 在AWK命令中必加 %c A S C I I字符 %d 整数 %e 浮点数,科学记数法 %f 浮点数,例如(123.44) %gawk 决定使用哪种浮点数转换e或者f %o 八进制数 %s 字符串 %x 十六进制数 $ printf "%.f/n" 33.48 $ 33 $ printf "%.1f/n" 33.48 $ 33.5 $ printf "%.2f/n" 33.48 $ 33.48 比如要用 printf 打印 "Average: 33.48" $ printf "%s" "Average: "; printf "%.2f" 33.48 AWK中的代码片段 AWK ' ...... END{ .......... print "Time Range,/tTimes,/tPercentage " .......... printf "%s", "1s,/t/t"tots1",/t" ; printf "%.2f/n", tots1 *100/NR .......... } 输出结果类似于 Time Range Times Percentage 1s 5 22.73% 1s ~ 2s 2 9.09% 2s ~ 5s 1 4.55% 5s ~ 10s 3 13.64%