shell编程(七)

前言

本文接着上篇博客来写,主要内容为awk命令的各种应用。

一、内建变量

awk常用内置变量:$1、$2、NF、NR、$0
$1:代表第一列
$2:代表第二列以此类推
$0:代表整行
NF:一行的列数
NR:行数
案例
1、awk -F: ‘/bash $/{print $0}’ /etc/passwd—————————在所有行中输出以bash结尾的所有行
在这里插入图片描述
2、awk -F: ‘{print NR}END{print NR}’ /etc/passwd——————————输出1、2行的行号、数据以及总行数
在这里插入图片描述
3、awk -F: ‘NR2 || NR3{print $1,$2}’——————————打印第二行,第三行中的1、3列
在这里插入图片描述
4、awk -F: ‘END{print $0}’ /etc/passwd———————————打印最后一行

在这里插入图片描述
5、ifconfig ens33 | awk ‘/broadcast/{print $2}’ ——————打印ip地址
在这里插入图片描述

二、BEGIN END 运算

逐行执行开始之前执行什么任务,结束之后再执行什么任务,用BEGIN、END
BEGIN一般用来做初始化操作,仅在读取数据记录之前执行一次
END一般用来做汇总操作,仅在读取完数据记录之后执行一次

2.1 awk运算

例如 :awk “BEGIN{a=100+200,print a}” —————————将a赋值为100+200,并进行运算和输出
在这里插入图片描述

2.2 模糊匹配

案例:awk -F: ‘$1~/x/{print $1,$3}’ /etc/passwd——————————打印第一列中包含x的行中的1、3列
在这里插入图片描述

2.3关于数值与字符串的

== :等于
!= :不等于
<= :小于等于

= : 大于等于
:大于
< : 小于

awk -F: ‘$3>1000{print $1,$3,$7}’ /etc/passwd ——————————输出第三列大于1000的所有行的第1、3、7列
在这里插入图片描述

2.4 逻辑运算

&& 要求所有条件都为真时才为真,否则为假。
|| 只要有一个条件为真就为真,全为假时才为假。
案例1:
awk -F: ‘NR>=3 && NR<=10{print $1"\t"$3"\t"$7}’ /etc/passwd ——————————输出大于等于第三行,小于等于第十行的所有行中的1、3、7列
在这里插入图片描述
案例2:awk -F: ‘$3==1000 || NR<=5{print}’ /etc/passwd ——————————打印第三列等于1000以及行数小于等于5的所有列
在这里插入图片描述

2.5 扩展

其他内置变量的用法FS(输入)、OFS、NR、FNR、RS、ORS
FS:输入字段的分隔符 默认是空格
OFS:输出字段的分隔符 默认也是空格
FNR:读取文件的记录数(行号),从1开始,新的文件重新重1开始计数
RS:输入行分隔符 默认为换行符
ORS:输出行分隔符 默认也是为换行符
案例一:awk ‘{FS=“:”;OFS=“,”}NR==2{print $1,$2,$3}’ /etc/passwd————————输出第二行的1、2、3列选择输入字段为:,输出字段位
在这里插入图片描述
案例二:awk ‘BEGIN{RS=“:”}{print}’ /etc/passwd————————指定换行符位:
在这里插入图片描述

三、awk高级用法 if语句

awk的if语句也分为单分支、双分支和多分支
用法:awk -F分隔符 ‘{if语句}{print输出的行与列}’ 文本
单分支案列:awk -F: ‘{if ($3 <= 1000){print $1}}’ /etc/passwd ——————————输出第三列小于等于1000的所有列
在这里插入图片描述
双分支案例:awk -F: ‘{if($3<1000){print $1}else{print $1,$3,$7}}’ /etc/passwd ——————如果第三列大于1000,则输出第一列,如果不是则输出第一、三、七列
在这里插入图片描述
多分支案例:awk -F: ‘{if($3==1000){print $1}else if($3<1000){print $1,$3}else{print $1,$3,$7}}’ /etc/passwd ——————第三列等于1000则输出第一列,第三列小于1000则输出1、3列,大于1000则输出1、3、7列
在这里插入图片描述

四、BEGIN END 流程

awk还支持for循环、while循环、函数、数组等
其他:awk ‘BEGIN{ commands } pattern{ commands } END{ commands }’

流程:
第一步:运行BEGIN{ commands }语句块中的语句。
第二步:从文件或标准输入(stdin)读取一行。然后运行pattern{ commands }语句块,它逐行扫描
文件,从第一行到最后一行反复这个过程。直到文件所有被读取完成。
第三步:当读至输入流末尾时,运行END{ commands }语句块。

awk -F: ‘!($3>10){print $1,$2,$3}’ /etc/passwd —————————取第三列小于等于10的行
在这里插入图片描述
awk -F: ‘($7 != “/bin/bash”)&&($7 != “/sbin/nologin”){print}’ /etc/passwd ——————输出第七列既不是/bin/bash也不是/sbin/nologin的所有行的所有列
在这里插入图片描述
awk -F: ‘($7~bin)(NF==7){print $1,$7}’ /etc/passwd ——————————输出第7列有bin并且有七个字段(一行有7列)的所有行的1、7列
在这里插入图片描述
awk -F “:” ‘$7~“bash”{print $1,123}’ /etc/passwd ————————输出第七列后面包含bash的行的第1列,并在后面加上123
在这里插入图片描述

总结

本文接着上篇博客来写,主要内容为awk命令的各种应用。希望本文内容能对大家有所帮助,谢谢观看😜

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值