awk命令是一种强大的文本处理工具,它属于Unix/Linux环境下的实用程序,其名称源自其三位主要开发者(Aho, Weinberger, Kernighan)的首字母。awk是一种解释型的编程语言,专门设计用于处理结构化数据,如以列(字段)分隔的文本文件。awk以简洁的语法和高效的处理能力而著称,尤其适用于对大量文本数据进行快速筛选、分析和格式转换。
基本用法与原理:
awk的工作原理基于“模式-操作”原则。它逐行读取输入文件(或来自管道、标准输入的数据),对每行应用一系列规则。规则由模式(pattern)和操作(action)组成。如果一行匹配了某个模式,则执行相应的操作。模式可以是正则表达式、关系表达式或逻辑表达式,也可以省略,此时默认所有行都匹配。操作通常是一组awk语句,用来处理匹配行的数据。
语法结构

awk 'pattern { action }' input_file(s)

其中:
pattern:可选,表示要匹配的条件。如果省略,则默认匹配所有行。
action:可选,当行匹配模式时执行的操作。操作通常包括变量赋值、打印、算术运算等,并可以包含多个语句,用花括号 {} 包围。
input_file(s):待处理的文本文件列表,可以是一个或多个文件名,也可以是-代表标准输入。
示例说明:
以下是一些使用awk命令的典型例子:
1打印特定列:
   awk '{ print $1 }' file.txt
   
这个命令会打印file.txt中每一行的第一个字段(以空格或制表符为默认分隔符)。$1、$2等代表各字段。
2按条件筛选行:
   awk '$3 > 100 { print }' data.txt
当data.txt中第三字段($3)的值大于100时,打印该行。
3计算总和:
   awk '{ sum += $NF } END { print sum }' numbers.txt
 对numbers.txt中每一行的最后一个字段($NF)求和,并在处理完所有行后打印总和。END块用于执行处理完所有输入后的一次性操作。
4格式化输出:
   awk '{ printf "%-10s %6d\n", $1, $2 }' table.txt
以指定格式打印table.txt的每一行:第一个字段左对齐占10个字符宽,第二个字段右对齐占6个字符宽,中间用空格分隔。
5处理多列数据:
   awk -F: '{ print "User:", $1, "UID:", $3 }' /etc/passwd
使用-F:指定分隔符为冒号,然后从/etc/passwd文件中提取每一行的第1个字段(用户名)和第3个字段(用户ID),并按照指定格式打印。
这些例子仅展示了awk功能的一部分。awk还支持数组、循环、函数、字符串操作等多种高级特性,使得它能够处理更为复杂的文本处理任务。