在详细阐述awk命令之前,我们首先了解一下awk是如何完成自己的任务的,我们将以一个名为names(仅有三行记录)的文件为例进行说明。
Tom Savage
100
Molly Lee 200
John Doe 300
Molly Lee 200
John Doe 300
使用下面的awk命令:
$awk
'{print $1,$3}' names
1.awk使用一行作为输入(通过文件或者管道),并将这一行赋给内部变量$0 ,默认时每一行也可以称为一个记录,以换行符结束。
2.然后,行被空格分解成字段(单词),每一个字段存储在已经编号的变量中,从$1 开始,可以多达100 个字段。
3.awk如何知道空格是用来分隔字段的呢?因为有另一个内部变量FS用来确定字段的分隔符。初始时,FS被赋为空格(包含制表符和空格符)。如果需要使用其他的字符分隔字段,如冒号或破折号,则需要将FS 变量的值设为新的字段分隔符。
4.awk打印字段时,将以下面方式使用print函数。
{print
$1
,
$3
}
输出显示了每个字段使用空格进行分隔,如下所示。
Tom
100
Molly 200
John 300
Molly 200
John 300
awk在Tom和100之间加入了空格,因为在$1和$3之间存在一个逗号。逗号比较特殊,它映射为另一个内部变量,称为输出字段分隔符(OFS), OFS默认为空格。逗号被OFS变量中存储的字符替换。
5 awk输出之后,将从文件中获取另一行,并将其存储到$0中,覆盖原来的内容,然后将新的字符串分隔成字段并进行处理。这个过程将持续到整个文件的所有行都处理完毕。