在Linux操作系统中,grep、sed、awk被称为文本操作“三剑客”,上几期中,我们详细介绍grep、sed、awk的基本使用方法,希望能够帮助到有需要的朋友。
目录
1、前言
2、条件控制语句
语法结构:IF
语法结构:IF - ELSE
语法结构:IF - ELSE - IF
3、循环语句
for 循环
while 循环
Break
Continue
Exit
1、前言
awk作为一门编程语言还有很多内容,我们继续学习awk。
网上有很多教程,讲的都很棒的,但是也讲得很迷糊。
关注我,我尽量讲清晰一些,希望您在看的过程中,能够有所发现。
老规矩,上官方手册:Gawk - GNU Project - Free Software Foundation (FSF)
工作流程如下图:BEGIN块开始,循环执行BODY块,最后执行END块。
大家记住这张图,下面我们来讲常用的结构化命令。它支持条件控制和循环语句,可以帮助您编写更复杂的程序。
主要有以下几种:
- 条件控制语句:IF 、IF - ELSE 、IF - ELSE - IF
- 循环语句:For、While
- 循环结束语句:Break、Continue、Exit
2、条件控制语句
AWK中的条件控制语句与C语言类似,包括以下几种:
IF | 根据条件执行指定语句。 |
IF - ELSE | 根据条件执行不同的语句。 |
IF - ELSE - IF | 根据多个条件执行不同的语句。 |
语法结构:IF
# 形式1:根据条件选择执行
if (condition)
action
# 形式2:使用花括号来执行一组
if (condition)
{
action-1
action-1
.
.
action-n
}
语法结构:IF - ELSE
# if-else语句中允许在条件为假时执行另外一组的动作
if (condition)
action-1
else
action-2
语法结构:IF - ELSE - IF
if (condition)
action-1
else if (condition)
action-2
else if (condition)
action-3
示例代码:
#IF 语句
# 判断数字是奇数还是偶数的示例:
$ awk 'BEGIN {num = 10; if (num % 2 == 0) printf "%d是偶数.\n", num }'
# 执行以上命令将得到如下结果:
10是偶数.
# IF - ELSE语句
# 判断数字是否为偶数的情况:
$ awk 'BEGIN {num = 12;
if (num % 2 == 0) printf "%d是偶数.\n", num;
else printf "%d是奇数.\n", num
}'
# 执行以上操作将得到如下结果:
12是偶数.
# IF-ELSE-IF语句
# 实现多个条件的判断:
$ awk 'BEGIN {
a=20;
if (a==10)
print "a = 10";
else if (a == 20)
print "a = 20";
else if (a == 30)
print "a = 30";
}'
# 执行以上命令将得到如下结果:
a = 20
3、循环语句
AWK 语言支持以下几种循环:
For | 用于重复执行一组语句,直到某个条件满足。 |
While | 只要某个条件为真,就一直重复执行一组语句。 |
Break | 用以结束循环。 |
Continue | 用于在循环体内部结束本次循环,从而直接进入下一次循环迭代。 |
Exit | 用于结束脚本程序的执行。 |
for 循环
for (初始化; 条件; 递增/递减)
动作
for 循环首先执行初始化动作,然后检查条件。如果条件为真,则执行动作,然后再执行递增或递减操作。只要条件为 true 循环就会一直执行。每次循环结束都会进条件检查,若条件为 false 则结束循环。
这里的for循环,和C语言是一样的,需要用;分开。
# 使用 for 循环输出数字 1 至 5
$ awk 'BEGIN { for (i = 1; i <= 5; ++i) print i }'
# 输出结果:
1
2
3
4
5
while 循环
while (条件)
动作
While 循环首先检查条件是否为 true ,若为 true 则执行动作。此过程一直重复直到条件为 false 才停止。
# 使用 While 循环输出数字 1 到 5
awk 'BEGIN { i = 1; while (i < 6) { print i; ++i } }'
# 输出结果:
1
2
3
4
5
Break
# break 用以结束循环。
# 计算和大于 50 时使用 break 结束循环
awk 'BEGIN {
sum = 0; for (i = 0; i < 20; ++i) {
sum += i; if (sum > 50) break; else print "Sum =", sum
}
}'
# 输出结果:
Sum = 0
Sum = 1
Sum = 3
Sum = 6
Sum = 10
Sum = 15
Sum = 21
Sum = 28
Sum = 36
Sum = 45
Continue
# Continue 语句用于在循环体内部结束本次循环,从而直接进入下一次循环迭代。
# 输出 1 到 20 之间的偶数
$ awk 'BEGIN {for (i = 1; i <= 20; ++i) {if (i % 2 == 1) continue ; else print i} }'
# 输出结果:
2
4
6
8
10
12
14
16
18
20
Exit
# Exit 用于结束脚本程序的执行,可以提供一个整数作为参数表示 AWK 进程结束状态。
# 和大于 50 时结束 AWK 程序
awk 'BEGIN {
sum = 0; for (i = 0; i < 20; ++i) {
sum += i; if (sum > 50) exit(10); else print "Sum =", sum
}
}'
# 输出结果:
Sum = 0
Sum = 1
Sum = 3
Sum = 6
Sum = 10
Sum = 15
Sum = 21
Sum = 28
Sum = 36
Sum = 45
让我们检查一下脚本执行后的返回状态:
$ echo $?
执行上面的命令可以得到如下的结果:
19
如果您觉得有些用处,欢迎在评论区留言,关注。谢谢您的阅读!
以上只是简单的介绍了一部分,后期我还会专门出一起处理脚本的实践教程,敬请关注!
往期学习笔记:
Windows系统开启Linux子系统(Ubuntu)
Linux常用命令(目录操作命令)
Linux常用命令:文件的创建、复制、移动、查找和删除命令
Linux常用命令:文本文件的查看与编辑
Linux常用命令:文本文件的拼接与分割
Linux常用命令:文件的权限管理
Linux常用命令:文件的下载、压缩与解压
Linux常用命令:常见的操作符
Linux常用命令:系统操作命令
Linux文本处理三剑客:grep
Linux文本处理三剑客:sed
Linux文本处理三剑客:awk
Linux文本处理三剑客:awk(常用匹配模式)