(八)、awk编程语句的应用


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()的新种子

在这里插入图片描述


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鹿快跑~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值