Linux文本处理三剑客:awk(结构化命令)

在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(常用匹配模式)

  • 20
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TiYong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值