转:https://linux.cn/article-7723-1.html
root@raspberrypi:/home/pi# ls -rlht
total 36K
drwxrwxr-x 2 pi pi 4.0K Jan 27 2015 python_games
-rwxr-xr-x 1 pi pi 286 Aug 27 12:11 stat.sh
drwxr-xr-x 2 root root 4.0K Sep 1 17:15 1602
-rw-r--r-- 1 root root 214 Sep 2 23:51 trace.log
drwxr-xr-x 3 root root 4.0K Sep 8 09:37 shell
drwxr-xr-x 3 motion motion 4.0K Sep 8 10:08 PiMotion
-rw-r--r-- 1 root root 421 Sep 8 10:48 opencv.py
-rw-r--r-- 1 root root 1.1K Sep 8 11:20 camera.py
drwxr-xr-x 3 root root 4.0K Sep 8 11:47 gpio
root@raspberrypi:/home/pi# ls -rlht|awk 'NR>0{print $3}'
pi
pi
root
root
root
motion
root
root
root
root@raspberrypi:/home/pi# ls -rlht|awk 'NR>1{print $3}'
pi
pi
root
root
root
motion
root
root
root
当你回顾所有到目前为止我们已经覆盖的 awk 实例,从 awk 系列的开始,你会注意到各种实例的所有指令是顺序执行的,即一个接一个地执行。但在某些情况下,我们可能希望基于一些条件进行文本过滤操作,即流程控制语句允许的那些语句。
在 awk 编程中有各种各样的流程控制语句,其中包括:
if-else 语句
for 语句
while 语句
do-while 语句
break 语句
continue 语句
next 语句
nextfile 语句
exit 语句
然而,对于本系列的这一部分,我们将阐述:if-else、for、while 和 do while 语句。请记住,我们已经在这个 awk 系列的第 6 部分介绍过如何使用 awk 的 next 语句。
1. if-else 语句
如你想的那样。if 语句的语法类似于 shell 中的 if 语句:
if (条件 1) {
动作 1
}
else {
动作 2
}
在上述语法中,条件 1 和条件 2 是 awk 表达式,而动作 1 和动作 2 是当各自的条件得到满足时所执行的 awk 命令。
当条件 1 满足时,意味着它为真,那么动作 1 被执行并退出 if 语句,否则动作 2 被执行。
if 语句还能扩展为如下的 if-else_if-else 语句:
if (条件 1){
动作 1
}
else if (条件 2){
动作 2
}
else{
动作 3
}
对于上面的形式,如果条件 1 为真,那么动作 1 被执行并退出 if 语句,否则条件 2 被求值且如果值为真,那么动作 2 被执行并退出 if 语句。然而,当条件 2 为假时,那么动作 3 被执行并退出 if 语句。
这是在使用 if 语句的一个实例,我们有一个用户和他们年龄的列表,存储在文件 users.txt 中。