shell脚本之AWK-AWK的详细介绍

一、AWK简介

二、AWK功能

三、AWK的工作流程

四、AWK程序执行

五、AWK的基本语法

在shell中AWK起到的作用是非常巨大的,它也是文本三剑客中功能最为强大的一个,对列处理最为明显。

一、AWK简介

  • awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
  • awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。
  • awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。
  • awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
  • awk有3个不同版本号: awk、nawk和gawk,未作特别说明,一般指gawk。
  • awk程序的报告生成能力通经常使用来从大文本文件里提取数据元素并将它们格式化成可读的报告。最完美的样例是格式化日志文件。

二、AWK功能

  • AWK是Linux和Unix环境中现有功能最为强大的文本处理器工具。AWK的设计使它非常适合处理由行和列组成的文本文件。
  • 和sed一样,awk也是逐行扫描文件的,从第一行到最后一行,寻找匹配特定模板的行,并在这些行上运行“选择”动作。如果一个模板没有指定动作,这些匹配的行就被显示在屏幕上。如果一个动作没有模板,所有被动作指定的行都被处理。
  • 除此之外AWK还是一种编程语言,它提供了正则表达式的匹配,流程控制、运算符、变量、表达式、和内置函数等程序设计语言所具备的特性。

三、AWK的工作流程
shell脚本之AWK-AWK的详细介绍_第1张图片

  • 1、通过关键字 BEGIN 执行 BEGIN 块的内容,即 BEGIN 后花括号 {} 的内容。

注:BEGIN {awk-commands}
开始块就是在程序启动的时候执行的代码部分,并且它在整个过程中只执行一次。一般情况下,我们可以在开始块中初始化一些变量。BEGIN 是 AWK 的关键字,因此它必须是大写的。开始块部分是可选的,你的程序可以没有开始块部分。

  • 2、完成 BEGIN 块的执行,开始执行body块。

主体块(BODY)
主体部分的语法格式如下:
/pattern/ {awk-commands}
对于每一个输入的行都会执行一次主体部分的命令。
默认情况下,对于输入的每一行,AWK 都会执行命令。但是,我们可以将其限定在指定的模式中。
注意:在主体块部分没有关键字存在。

  • 3、读入有 \n 换行符分割的记录。
  • 4、将记录按指定的域分隔符划分域,填充域,$0 则表示所有域(即一行内容),$1 表示第一个域, $ n 表示第 n 个域。
  • 5、依次执行各 BODY 块,pattern 部分匹配该行内容成功后,才会执行 awk-commands 的内容。
  • 6、循环读取并执行各行直到文件结束,完成body块执行。
  • 7、开始 END 块执行,END 块可以输出最终结果。

结束块(END)
结束块的语法格式如下:
END {awk-commands}
结束块是在程序结束时执行的代码。 END 也是 AWK 的关键字,它也必须大写。 与开始块相似,结束块也是可选的。

四、AWK的程序执行
1.通过命令的方式执行AWK程序

语法: awk 'program-text' datefile

2.执行AWK脚本

  • 在大多数情况下awk程序语句,用户会将所有的语句写在一个脚本文件中,然后通过awk命令来解释并执行其语句。
语法: awk -f 'progarm_awk_file' file
  • 上述语法中,-f选项表示从脚本文件中读取AWK程序语句,program-file表示awk脚本文件的名称,file表示要处理的数据文件。

3.可执行脚本文件

  • 上述两种方法都需要,用户在命令行里键入AWK命令才能执行相应的AWK程序语句,此种方式通过类似执行shell脚本的方式来执行,使用此种方式,需要在awk程序中指定命令解释器,并且赋予脚本文件执行权限。
#! /bin/awk -f
此行必须放置在脚本文件的第一行
然后使用以下所示语法执行AWK程序语句:
语法:awk-script_filename file
  • 其中awk-script_filename为awk的脚本文件名,file为要处理的数据文件名

五、AWK的基本语法


```bash
[root@bogon ~]# awk --help
用法:awk [POSIX 或 GNU 风格选项] -f 脚本文件 [--] 文件 ...
用法:awk [POSIX 或 GNU 风格选项] [--] '程序' 文件 ...
POSIX 选项:		GNU 长选项:(标准)
	-f 脚本文件		--file=脚本文件
	-F fs			--field-separator=fs
	-v var=val		--assign=var=val
短选项:		GNU 长选项:(扩展)
	-b			--characters-as-bytes
	-c			--traditional
	-C			--copyright
	-d[文件]		--dump-variables[=文件]
	-D[文件]		--debug[=文件]
	-e '程序文本'	--source='程序文本'
	-E 文件			--exec=文件
	-g			--gen-pot
	-h			--help
	-i 包含文件		--include=包含文件
	-l 库		--load=库
	-L[fatal|invalid]	--lint[=fatal|invalid]
	-M			--bignum
	-N			--use-lc-numeric
	-n			--non-decimal-data
	-o[文件]		--pretty-print[=文件]
	-O			--optimize
	-p[文件]		--profile[=文件]
	-P			--posix
	-r			--re-interval
	-s			--no-optimize
	-S			--sandbox
	-t			--lint-old
	-V			--version

例:打印hello world

[root@bogon ~]# awk 'BEGIN {print "hello world"}'
hello world

你可能感兴趣的:(shell,linux,编程语言,shell,awk)