1 |
awk [-F fs] [-v var=value] [-f progfile | 'prog'] [file ...] |
awk 进行文本处理, 按行处理, -F 是文本分隔符, 默认空格; 获取分割的结果 $0 是所有结果, $1 取到第一个结果.
内置变量
- NF 分隔之后的字段个数
- ARGC 命令行参数个数
- ARGV 命令行参数排列
- ENVIRON 支持队列中系统环境变量的使用
- FILENAME awk浏览的文件名
- FNR 浏览文件的记录数
- FS 设置输入域分隔符,等价于命令行 -F选项
- NF 记录的域的个数
- NR 已读的记录数
- OFS 域分隔符
- ORS 记录分隔符
- RS 控制记录分隔符
内置函数
算术函数
- atan2( y, x ) 返回 y/x 的反正切。
- cos( x ) 返回 x 的余弦;x 是弧度。
- sin( x ) 返回 x 的正弦;x 是弧度。
- exp( x ) 返回 x 幂函数。
- log( x ) 返回 x 的自然对数。
- sqrt( x ) 返回 x 平方根。
- int( x ) 返回 x 的截断至整数的值。
- rand( ) 返回任意数字 n,其中 0 <= n < 1。
- srand( [Expr] ) 将 rand 函数的种子值设置为 Expr 参数的值,或如果省略 Expr 参数则使用某天的时间。返回先前的种子值。
字符串函数
- length(string) 获取 string 的长度
- substr(str,start,len) 返回子串, 从start开始截取长度为 len 的子串
- tolower(str) 返回小写的副本
- toupper(str) 返回大写的副本
- index(str,find) str里存在子字符串find,就返回find的起始位置, 不存在就返回0
- match(str,regexp) str 匹配正则表达式regexp, 存在匹配的子串就返回子串开始的位置, 不存在返回0, substr(str,RSTART,RLENGTH) 获取子串
- sub(regexp, replacement,target) 将 target 里第一个符合regexp的替换成replacement
- gsub(regexp, replacement,target) 将 target 里所有符合regexp的替换成replacement
- split(str,array,[regexp]) 使用 regexp 分割字符串 str 至 array,regexp省略时用 FS
自定义变量
在命令中可以自定义变量, BEGIN{}中指定的指令可以在分隔调用前前执行, END{}在分隔全部执行后执行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# 分隔以及内置变量 $ echo "AAA:BBB:CCC" | awk -F ':' '{print NF ":" $2}' 3:BBB # 字符串函数 echo "AAA:BBB:CCC" | awk -F ':' '{print NF ":" tolower($2)}' 3:bbb # 自定义变量以及 BEGIN 和 END 的使用 $ echo "AAA:BBB:CCC" | awk -F ':' 'BEGIN{size=0;print "begin:" size;} END{size++;print "end:" size;} {print NF ":" $2}' begin:0 3:BBB end:1 |
0 Comments