【三剑客】awk命令

前言

awk是一种很棒的语言,它适合文本处理和报表生成。

其语法比较常见,借鉴了某些语言的一些精华,比如C语言等。

在Linux系统日常处理工作中,发挥很重要的作用,掌握了awk将会使你的工作变得高大上。

1. awk实战讲解

1.1 awk的原理

通过一个简单的命令,我们来了解其工作原理。

awk '{print $0}' /etc/passwd
echo hhh|awk '{print "hello,world"}'
awk '{print "hiya"}' /etc/passwd

输出:

[root@oldboy /]# awk '{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
...
stu06:x:831:831::/home/stu06:/bin/bash
stu07:x:832:832::/home/stu07:/bin/bash
stu08:x:833:833::/home/stu08:/bin/bash
stu09:x:834:834::/home/stu09:/bin/bash
stu10:x:835:835::/home/stu10:/bin/bash


[root@oldboy /]# echo hhh|awk '{print "hello,world"}'  
hello,world


[root@oldboy /]# awk '{print "hiya"}' /etc/passwd
hiya
hiya
...

hiya
hiya
hiya
hiya
hiya
# 行数和/etc/passwd的行数相等
awk示例

通过上面的示例,解释awk做了些什么:

  • 调用awk时,我们指定/etc/passwd作为输入文件。
  • 执行awk时,它依次对/etc/passwd中的每一行执行print命令。
  • 所有输出都发送到stdout,所得到的结果与执行cat /etc/passwd完全相同。

现在,解释{print} 代码块:

  • 在awk中,花括号{} 将几块代码组合到一起,这一点类似C语言。
  • 在代码块中只有一条print命令。在awk中,如果只出现print命令,那么将打印当前行的全部内容。

再次说明,awk对输入文件中的每一行都执行这个脚本:

 1.2 BEGIN和END模块

通常,对于每个输入行,awk都会执行每个脚本代码块一次。

然而,在许多变成情况中,可能需要在awk开始处理文件的文本之前执行初始化代码。

对于这种情况,awk允许定义一个BEGIN块。

awk在开始处理输入文件之前会执行BEGIN块,因此,它是初始化FS(字段分隔符)变量、打印页眉或初始化其它在程序中以后会使用的全局变量的极佳位置。

awk还提供了另一个特殊块,叫做END块。

awk在处理了输入文件中的所有行之后执行END块。

通常,END块用于执行最终计算或打印应该出现在输出流结尾的摘要信息。

1.3 运算符

猜你喜欢

转载自www.cnblogs.com/zoe233/p/11923734.html