1. 比较运算
1.1 说明
符号 | 说明 |
---|
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
== | 等于 |
!= | 不等于 |
~ | 匹配 |
!~ | 非匹配 |
1.2 示例
查看普通用户
即id号大于等于1000的用户
| [root@liubei ~]# awk -F: '$3>=1000{print $1,$3}' /etc/passwd |
| cloud_user 1000 |
| liubei 1001 |
| guanyu 1002 |
查看非root用户
id非0的用户
| [root@liubei ~]# awk -F : '$1!="root"{print $1,$3}' /etc/passwd |
| bin 1 |
| daemon 2 |
| adm 3 |
| lp 4 |
| …… |
| liubei 1001 |
| guanyu 1002 |
| guanping 1003 |
匹配
| [root@liubei ~]# awk -F : '$1~"uan"{print $1,$3}' /etc/passwd |
| guanyu 1002 |
| guanping 1003 |
匹配支持正则
| [root@liubei ~]# awk -F : '$1~"guan.*g"{print $1,$3}' /etc/passwd |
| guanping 1003 |
| [root@liubei ~]# awk -F : '$1~"\\<l.*"{print $1,$3}' /etc/passwd |
| lp 4 |
| liubei 1001 |
2. 算术运算
2.1 说明
2.2 示例(打印奇数id的用户)
| [root@liubei ~]# 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)
| [root@liubei ~]# 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 创建数组
语法
示例
| #!/bin/awk -f |
| BEGIN{ |
| user[0]="liubei"; |
| user[1]="guanyu"; |
| print user[0],user[1] |
| } |
| [root@liubei ~]# ./test.awk |
| liubei guanyu |
4.2 删除数组
语法
示例
| #!/bin/awk -f |
| BEGIN{ |
| user[0]="liubei"; |
| user[1]="guanyu"; |
| delete user[1]; |
| print user[0],user[1] |
| } |
| [root@liubei ~]# ./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 |
| …… |
完整示例
| #!/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 |
| } |
| } |
| |
| [root@liubei ~]# ./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 |

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律