awk BEGIN模式
(1)、BEGIN后面跟一个操作块,awk必须在对输入文件进行任何处理之前先执行该操作块
(2)、BEGIN语句常常被用于修改内置变量的值,为用户自定义变量赋初值等
(3)、BEGIN后面跟用大括号包含的操作内容
awk 'BEGIN{FS=":"}{print $1,$2}' /etc/passwd
# 说明:把文件的分隔符设置为“:”,并输出文件的前2列
awk END模式
(1)、END模式不匹配任何输入行,awk处理完所有输入行之后才处理END模式里面的内容
(2)、END后面跟用大括号包含的操作内容
awk 'END{print"The number of records is"NR}' filename
# 说明:awk处理完整个文件后才开始执行END块,此时NR的值是最后这条记录的记录号
awk输出重定向
(1)、将awk的输出重定向到文件时,使用shell的重定向操作符
(2)、重定向的目标文件必须用双引号括起来
(3)、支持的重定向符有>和>>
awk -F":" '$1 ~ /root/{print $7 > "file"}' /etc/passwd
# 说明:查找/etc/passwd文件中第1列为root的行,并把该行第7列的内容输出到file文件中
awk输入重定向
函数getline用于从标准输入、管道、文件读取输入
awk 'BEGIN{"date" | getline d;print d}'
# 说明:先执行date命令,将输出通过管道发给getline,再通过getline将传来的内容赋值给用户自定义变量d,然后打印d
if语句
(1)、以if结构开头的语句属于操作语句,后面跟一个圆括号括起来的表达式
(2)、如果该表达式的运算结果为真,则执行表达式后的语句,如果跟在条件表达式后面的语句不止一条,就要用分号分隔开,用大括号把这一组语句都括起来,以作为一个块来执行
awk '{if ($1>50) print $1 "Too big"}' file
# 说明:如果file中的行第1个字段大于50,就输出Too big
awk '{if ($1 > 50) print $1 "Too big";else print "Range is OK"}' file
awk循环语句
(1)、awk循环语句,当测试表达式条件为真时,重复执行表达式后面的语句
(2)、awk支持的循环有:while循环和for循环
awk '{i = 1;while(i <= NF){print $1;i++}}' file
# 说明:变量i被初始化为1;当小于或等于记录的字段NF时,先执行print语句,然后将i加1,接下来又重新测试表达式,直至i大于NF的值
(3)、for循环的圆括号中需要3个表达式
(4)、前2个分别是初始化表达式和测试表达式
(5)、第3个则用于更新测试表达式使用的变量
awk '{for(i=1;i<=NF;i++) print $i}' file
sub函数
(1)、用于在记录中查找能够匹配正则表达式的最长且最靠左的子串,然后用替换串取代找到的子串
(2)、格式:
-
sub(正则表达式, 替换串);
-
sub(正则表达式, 替换串, 目标串);
awk -F: '{sub(/root/,"root at host");print $1}' /etc/passwd
# 说明:在记录($0)中第一次匹配到正则表达式root时,root被替换为字符串“root at host”,sub函数只对每行中出现的第一个匹配字符串进行替换
awk -F: '{sub(/root/,"root at host",$1);print $1}' /etc/passwd
# 在记录的第一个字段($1)中第一次匹配到正则表达式root时,root被替换为字符串“root at host”,sub函数只对目标串中出现的第一个匹配字符串进行替换
注:不会对源文件进行修改
gsub函数
(1)、gsub函数用于替换多次匹配到的字符串
(2)、格式:
-
gsub(正则表达式, 替换串);
-
gsub(正则表达式, 替换串, 目标串);
awk -F: '{gsub(/root/,"root at host");print}' /etc/passwd
length函数
(1)、length函数返回字符串中字符的个数,如果未指定参数,则length函数返回记录中的字符个数
(2)、格式:
- length (字符串)
awk 'BEGIN{print length("hello")}'
# 说明:返回字符串hello的长度
substr函数
算术函数
运算符 | 含义 |
---|---|
atan2(x,y) | 值域内y/x的反正切 |
cos(x) | x的余弦,x为弧度 |
exp(x) | x的e指数函数 |
int(x) | x的整数部分,当x>0,向下取整 |
log(x) | x的自然对数(底数为e) |
rand() | 随机数r(0<r<1) |
sin(x) | x的正弦,x为弧度 |
sqrt(x) | x的平方根 |
srand(x) | x是rand()的新种子 |