开发工具

Shell之 awk 指令

awk 是一种强大的文本处理工具,广泛用于 Unix 和类 Unix 系统中的命令行环境中。awk 是一种编程语言,专为文本和数据提取、报告生成而设计。它能够处理输入文件中的每一行,并根据用户指定的模式对行和字段进行操作。


基本语法

awk 'pattern {action}' input-file

pattern:可选的,用于指定要匹配的行。如果省略,则对所有行执行 action。

action:在匹配到 pattern 的行上执行的命令。

input-file:要处理的输入文件。如果省略,awk 将从标准输入读取数据。


常用选项

-F:指定输入字段分隔符。默认是空白字符(空格或制表符)。

-v:向 awk 脚本传递变量。


工作原理

awk 默认将输入文件分割成记录(行)和字段(由字段分隔符分隔的文本块)。awk 对每一行执行指定的模式匹配,并在匹配的行上执行相应的动作。


示例

1、打印文件中的所有行

awk '{print}' filename

这相当于 cat filename。


2、打印文件的第一列

awk '{print $1}' filename

假设字段由空白字符分隔。


3、使用逗号作为字段分隔符打印第二列和第三列

awk -F, '{print $2, $3}' filename


4、统计文件中的行数

awk 'END {print NR}' filename

NR 是 awk 的内置变量,表示当前记录号(行号)。


5、打印长度大于 10 的行

awk 'length($0) > 10' filename


6、计算每列的总和

awk '{sum1 += $1; sum2 += $2} END {print sum1, sum2}' filename


注意事项

1、awk 的字段和记录概念非常强大,允许用户以灵活的方式处理文本数据。

2、awk 脚本可以包含变量、条件语句、循环和其他控制结构,使其成为一种功能齐全的编程语言。

3、awk 的输出可以重定向到文件或另一个命令,也可以与其他 Unix 工具(如 grep、sed、sort)结合使用,以构建强大的文本处理管道。

4、在处理大型文件时,awk 通常比 shell 脚本中的循环和条件语句更高效,因为它是在 C 语言中实现的,并且针对文本处理进行了优化。