awk
是一个强大的文本处理工具,广泛用于Linux和Unix系统中。它能够根据指定的模式搜索数据文件,并对找到的数据进行处理。awk
的名字来源于它的三位开发者 Alfred Aho、Peter Weinberger 和 Brian Kernighan 姓氏的首字母。
awk
基本结构awk
程序的基本结构如下:
awk 'pattern {action}' filename
action
部分会被执行。如果没有提供模式,awk
将对每一行执行动作;如果没有提供动作,默认的动作是打印该行。
awk
的基本用法最基本的用法是打印整个文件的内容:
awk '{print}' file.txt
这等同于直接使用 cat
命令。
awk
可以轻松地处理表格数据,比如CSV文件。假设有一个文件 data.txt
,其内容如下:
John,30,Engineer
Mary,25,Doctor
Bob,40,Lawyer
我们可以使用 awk
提取第二列(年龄):
awk -F',' '{print $2}' data.txt
这里 -F','
指定了字段分隔符为逗号。
可以使用条件来过滤行。例如,只打印年龄大于30的行:
awk -F',' '$2 > 30 {print}' data.txt
这将输出:
Bob,40,Lawyer
awk
提供了一些有用的内置变量:
NF
: 当前行的字段数。NR
: 当前处理的行号。FILENAME
: 当前文件名。例如,打印每行的字段数和行号:
awk '{print "Line " NR ": Fields " NF}' file.txt
首先创建一个包含一些数据的文件 test.txt
:
echo -e "Alice 25 Developer\nBob 30 Engineer\nCharlie 35 Designer" > test.txt
awk
提取信息现在我们可以尝试提取不同信息。例如,提取所有人的名字:
awk '{print $1}' test.txt
或者找出年龄大于30的人:
awk '$2 > 30 {print $0}' test.txt
我们还可以结合其他命令,如 sort
,对结果进行排序:
awk '{print $2, $1}' test.txt | sort -n
这将按年龄从小到大排序并打印名字和年龄。