当前位置:网站首页>awk语法-02-运算、数组、格式化输出
awk语法-02-运算、数组、格式化输出
2022-08-03 18:57:00 【开发运维玄德公】
文章目录
1. 比较运算
1.1 说明
符号 | 说明 |
---|---|
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
== | 等于 |
!= | 不等于 |
~ | 匹配 |
!~ | 非匹配 |
1.2 示例
查看普通用户
即id号大于等于1000的用户
[[email protected] ~]# awk -F: '$3>=1000{print $1,$3}' /etc/passwd
cloud_user 1000
liubei 1001
guanyu 1002
查看非root用户
id非0的用户
[[email protected] ~]# awk -F : '$1!="root"{print $1,$3}' /etc/passwd
bin 1
daemon 2
adm 3
lp 4
……
liubei 1001
guanyu 1002
guanping 1003
匹配
[[email protected] ~]# awk -F : '$1~"uan"{
print $1,$3}' /etc/passwd
guanyu 1002
guanping 1003
匹配支持正则
- 包含
guan.*g
的用户
[[email protected] ~]# awk -F : '$1~"guan.*g"{print $1,$3}' /etc/passwd
guanping 1003
- 以
l
开头的用户
[[email protected] ~]# awk -F : '$1~"\\<l.*"{print $1,$3}' /etc/passwd
lp 4
liubei 1001
2. 算术运算
2.1 说明
符号 | 说明 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取余 |
^ | 幂 |
2.2 示例(打印奇数id的用户)
[[email protected] ~]# awk -F: '$3%2==1{print $1,$3}' /etc/passwd
bin 1
adm 3
sync 5
halt 7
operator 11
nobody 99
dbus 81
polkitd 999
postfix 89
liubei 1001
guanping 1003
3. 逻辑运算
3.1 说明
符号 | 说明 |
---|---|
&& | 和 |
|| | 或 |
! | 非 |
3.2 示例(打印非系统用户)
即 root(id=0)和普通用户(id>=1000)
[[email protected] ~]# awk -F: '$3==0||$3>=1000{print $1,$3}' /etc/passwd
root 0
cloud_user 1000
liubei 1001
guanyu 1002
guanping 1003
4. 数组
4.1 创建数组
语法
数组名[索引]=值
示例
- 创建 test.awk内容如下
#!/bin/awk -f
BEGIN{
user[0]="liubei";
user[1]="guanyu";
print user[0],user[1]
}
- 执行
[[email protected] ~]# ./test.awk
liubei guanyu
4.2 删除数组
语法
delete 数组名[索引]
示例
- 创建test.awk文件如下
#!/bin/awk -f
BEGIN{
user[0]="liubei";
user[1]="guanyu";
delete user[1];
print user[0],user[1]
}
- 执行
[[email protected] ~]# ./test.awk
liubei
5. printf 格式化输出
和其他语言没有什么区别,简单示例一下:
接收类型
awk -F: '{printf "%s %s \n", $1,$3}' /etc/passwd
说明: %s 字符型,%d 整数型,%f 浮点型
定义列宽
在接收类型中间可以添加数字表示列宽。
- 语法示例
awk -F: '{printf "|%20s|%20s\n", $1,$3}' /etc/passwd
- 执行结果
| root| 0
| bin| 1
| daemon| 2
| adm| 3
| lp| 4
……
对齐方式
在列宽两侧加
-
,表示字串靠哪个方向对齐(默认右对齐)。
- 语法示例
awk -F: '{printf "|%-20s|%-20s\n", $1,$3}' /etc/passwd
- 执行结果
|root |0
|bin |1
|daemon |2
|adm |3
|lp |4
……
完整示例
- 创建myAwk.awk 文件如下
#!/bin/awk -f
BEGIN{
FS=":";
line="============================================";
printf "|%-20s|%-20s|%-20s\n%s\n","Type","Name","Id",line
}
{
if($3==0){
printf "|%-20s|%-20s|%-20s\n","root_user",$1,$3
}else if($3>=1000){
printf "|%-20s|%-20s|%-20s\n", "ord_user",$1,$3
}else{
printf "|%-20s|%-20s|%-20s\n", "sys_user",$1,$3
}
}
- 执行
[[email protected] ~]# ./myAwk.awk /etc/passwd
|Type |Name |Id
============================================
|root_user |root |0
|sys_user |bin |1
|sys_user |daemon |2
|sys_user |adm |3
|sys_user |lp |4
|sys_user |sync |5
|sys_user |shutdown |6
|sys_user |halt |7
|sys_user |mail |8
|sys_user |operator |11
|sys_user |games |12
|sys_user |ftp |14
|sys_user |nobody |99
|sys_user |systemd-network |192
|sys_user |dbus |81
|sys_user |polkitd |999
|sys_user |sshd |74
|sys_user |postfix |89
|sys_user |chrony |998
|ord_user |cloud_user |1000
|ord_user |liubei |1001
|ord_user |guanyu |1002
|ord_user |guanping |1003
边栏推荐
猜你喜欢
随机推荐
读取 resources 目录下的文件路径的九种方式,你知道多少?
flex布局
MySQL如何一劳永逸的永久支持输入中文
Jenkins CI平台(二)
金鱼哥RHCA回忆录:CL210管理计算资源--管理计算节点+章节实验
6000 字+,帮你搞懂互联网架构演变历程!
【C语言学习笔记(六)】分支与跳转(if、else、continue、break、switch)
typescript学习笔记
When does MySQL use table locks and when to use row locks?You should know this
[Notes] Introduction to machine learning
sys文件系统
架构基本概念和架构本质
梅科尔工作室-14天华为培训六
开发即时通讯到底需要什么样的技术,需要多久的时间
PHP Basic Notes-NO.2
U-Net生物医学图像分割讲解(Convolutional Networks for BiomedicalImage Segmentation)
flink-sql 客户端 可以设置并行度 吗?断开算子链
Mkke:为什么无法从Oracle 11g或12c升级到Oracle 23c?
OneNote 教程,如何在 OneNote 中设置页面格式?
首届MogDB征文活动开启啦!