1. 条件表达式
语法
| awk '{print (条件)?满足条件给出值:不满足条件给出值}' 文件名 |
完整示例
| #!/bin/awk -f |
| BEGIN{ |
| FS=":"; |
| line="============================================"; |
| print "Type\t\tName\t\tId\n",line |
| } |
| |
| { |
| print ($3!=0&&$3<500)?"系统用户:\t"$1"\t\t"$3:"普通用户:\t"$1"\t\t"$3; |
| } |
| [root@liubei ~]# ./myAwk.awk /etc/passwd |
| Type Name Id |
| ============================================ |
| 普通用户: root 0 |
| 系统用户: bin 1 |
| 系统用户: daemon 2 |
| 系统用户: adm 3 |
| 系统用户: lp 4 |
| 系统用户: sync 5 |
| …… |
2. if 语句
语法
| if(条件){ |
| 执行内容 |
| }else if(){ |
| 执行内容 |
| }else{ |
| 执行内容 |
| } |
示例
| #!/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 |
3. while循环
语法
示例
每行打印10遍
| #!/bin/awk -f |
| BEGIN{ |
| FS=":" |
| } |
| { |
| i=0 |
| while(i<=10){ |
| print $1,$3 |
| i++ |
| } |
| } |
| [root@liubei ~]# ./myAwk.awk /etc/passwd |
| root 0 |
| root 0 |
| root 0 |
| root 0 |
| root 0 |
| root 0 |
| root 0 |
| root 0 |
| root 0 |
| root 0 |
| root 0 |
| bin 1 |
| bin 1 |
| bin 1 |
| bin 1 |
| bin 1 |
| bin 1 |
| bin 1 |
| bin 1 |
| bin 1 |
| bin 1 |
| bin 1 |
| …… |
4. for 循环
语法
| for(i=x;i<=n;i++){ |
| 执行内容 |
| } |
| |
示例
每行打印10次
| #!/bin/awk -f |
| BEGIN{ |
| FS=":" |
| } |
| { |
| for(i=0;i<=10;i++){ |
| print $1,$3 |
| } |
| } |
| [root@liubei ~]# ./myAwk.awk /etc/passwd |
| root 0 |
| root 0 |
| root 0 |
| root 0 |
| root 0 |
| root 0 |
| root 0 |
| root 0 |
| root 0 |
| root 0 |
| root 0 |
| bin 1 |
| bin 1 |
| bin 1 |
| bin 1 |
| bin 1 |
| bin 1 |
| bin 1 |
| bin 1 |
| bin 1 |
| bin 1 |
| bin 1 |
| …… |
5. 执行shell命令
语法
说明:
- 引号中的部分,会原封不动的传给系统
- 引号外的部分,会经过awk处理后传给系统(因此变量要写在引号外)
示例
向每个普通用户家目录的用户名.txt
文件内写当前时间
| #!/bin/awk -f |
| BEGIN{ |
| FS=":" |
| } |
| { |
| if($3>1000){ |
| system("echo `date` > /home/"$1"/"$1".txt" ) |
| } |
| } |
| |
| [root@liubei ~]# ./myAwk.awk /etc/passwd |
| [root@liubei ~]# cat /home/liubei/liubei.txt |
| 2022年 07月 31日 星期日 17:16:38 CST |
| [root@liubei ~]# cat /home/guanyu/guanyu.txt |
| 2022年 07月 31日 星期日 17:16:38 CST |

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