概述
gawk提供了一种编程语言,而不仅仅是编辑器命令。
在gawk语言中,可以实现如下操作:
- 定义变量保存数据
- 使用算数和字符串运算符处理数据
- 使用结构化编程概念 为数据处理添加处理逻辑
- 提取文件中的数据并将其重新排列组合,最后生成格式化报告
一、gawk命令格式
gawk options program file
选项 | 描述 |
---|---|
-F fs | 指定字段分隔符 |
-f file | 指定脚本文件 |
-v var=value | 定义gawk脚本中的变量及默认值 |
-L [keyword] | 执行兼容模式或警告级别 |
gawk的强大之处在于脚本,你可以编写脚本来读取文件中的数据,然后对其进行处理并显示,形成各种输出报告。
二、从命令行读取gawk脚本
gawk脚本用一对花括号定义,必须将命令放到花括号之间。
由于gawk命令行假定脚本是单个文本字符串,因此还必须将脚本放到单引号中。
$ gawk '{print "hello world"}'
sadas
hello world
脚本定义了一个命令 print,它会将输出打印到STDOUT。
因为没有指定文件,所以它一直等待STDIN的输入。无论输入什么,都会打印 hello world。按ctrl+D结束执行。
三、使用数据字段变量
gawk会为每一行的各个字段分配一个变量。默认情况下,gawk会将下列变量分配给文本行中的数据字段。
- $0 代表整个文本行
- $1 代表第一个字段
- $2 代表第二个字段
- $n 代表第n个字段
$ cat <data1
header line
data line 1
End of data line
$ gawk '{print "first="$1 " second="$2}' data1
first=header second=line
first=data second=line
first=End second=of
四、在脚本中使用多条命令
要在命令行指定的脚本中使用多条命令,只需在命令间加分号即可。
$ cat <data1
header line
data line 1
End of data line
$ gawk '{$1="replacement";print $0}' data1
replacement line
replacement line 1
replacement of data line
这个脚本先将第一个字段改成 replacement,再显示整行文本。
五、从文件中读取脚本
gawk允许将脚本保存在文件中,然后在命令行中引用脚本。
$ cat <gawk_cmd
{print $1="replacement" " "$0}
$ gawk -f ./gawk_cmd data1
replacement header line
replacement data line 1
replacement End of data line
六、处理数据前执行脚本
gawk会在读取数据前 执行 BEGIN指定的脚本
$ cat <gawk_cmd
BEGIN {
print "Replacement result:"
}
{print $1="replacement" " "$0}
$ gawk -f ./gawk_cmd data1
Replacement result:
replacement header line
replacement data line 1
replacement End of data line
七、处理输出后执行脚本
END关键字允许指定一个脚本,gawk会在处理完数据之后执行这个脚本。
cat <gawk_cmd
BEGIN {
print "Replacement result:"
}
{print $1="replacement" " "$0}
END {
print "End of file"
}
$ gawk -f ./gawk_cmd data1
Replacement result:
replacement header line
replacement data line 1
replacement End of data line
End of file