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的工作流程
- 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脚本之AWK-AWK的详细介绍相关推荐
- shell脚本——正则表达式(包含grep详细介绍及应用)
正则表达式 正则表达式的作用 前言案例:使用^和$判断用户输入的是否是数字 基础正则表达式元字符 基础正则表达式元字符案例 扩展正则表达式元字符 扩展正则表达式元字符案例 正则表达式元字符综合案例 三 ...
- linux awk数组长度,linux awk数组操作详细介绍
linux awk数组操作详细介绍 用awk进行文本处理,少不了就是它的数组处理.那么awk数组有那些特点,一般常见运算又会怎么样呢.我们先看下下面的一些介绍,结合例子我 们会讲解下它的不同之处.在 ...
- shell编程入门 linux解释器原理,Shell编程入门Linux解释器原理详细介绍 使用Shell进行工作的人们对.doc...
Shell编程入门Linux解释器原理详细介绍 使用Shell进行工作的人们对 Shell编程入门:Linux解释器原理详细介绍使用Shell进行工作的人们对Unix/Linux下的Shell编程都很 ...
- linux 脚本加密,Shell脚本的4种加密详细教程
这篇文章上次修改于 1159 天前,可能其部分内容已经发生变化,如有疑问可询问作者. 普及,shell脚本是什么? Shell Script,Shell脚本与Windows/Dos下的批处理相似,也就 ...
- shell脚本语言(超全超详细)
shell脚本语言 1.shell的概述 2.脚本的调用形式 打开终端时系统自动调用:/etc/profile 或 ~/.bashrc 3.shell语法初识 3.1.定义以开头:#!/bin/bas ...
- linux数组长度的函数,linux awk数组操作详细介绍
用awk进行文本处理,少不了就是它的数组处理.那么awk数组有那些特点,一般常见运算又会怎么样呢.我们先看下下面的一些介绍,结合例子我们会讲解下它的不同之处.在 awk 中数组叫做关联数组(assoc ...
- shell脚本编程之awk入门
awk是一个基于列的文本处理工具,另外还有一个基于行模式的sed,本文简要介绍awk的基本使用 示例 awk按行读取文本并视为一条记录,每条记录以字段分割成若干字段,然后输出各字段的值.分割方式默认是 ...
- shell脚本工具之awk命令
awk是一种优良的文本处理工具.可以对文件中的内容一行一行提取并处理,也可将文件分列的形式提取. awk内置变量: $0 --输出文件所有内容 $1-$n ...
- shell脚本,用awk实现替换文件里面的内容。
文件是这样,有ID和具体信息,ID行以@开头,后面的信息有空格,把第一个空格后的全部内容替换为空格前的字符. 用AWK来实现. @AA10 P 7 # YYYYYYYYYYYYYYYYYY ZZ ...
- shell脚本案例30个带详细解析
案例一:输入网卡的名字,来输出网卡的IP 1.问题: 1.)参数后判断要加"" 2.)名字为空时显示ip 2.分析: ) 把本机的所有网卡名列出来,来引导用户输入. ) 使用命令列 ...
最新文章
- 【Treap】bzoj1588-HNOI2002营业额统计
- 微软推出Python入门课,登上GitHub趋势榜第一
- 动态规划 HDOJ2602-Bone Collector-01背包
- 如何将yolo的标注(annotations).txt 坐标转换成tensorflow-yolov3(YunYang1994)的.txt 标注坐标?
- grunt 0.4.1构建工具入门实践(转)
- post 请求 argument type mismatch_Flask-RESTful 请求解析
- 删文97篇!前UCLA教授竟是民科?不看好量子通信被禁言
- php strchr 截断,PHP strchr() 函数
- python绘制正方形、利用turlr_《像计算机科学家一样思考Python》学习笔记(四)...
- django开发-在Docker中部署django项目
- Failed to load VMMR0.r0 (VERR_SUPLIB_OWNER_NOT_ROOT)
- jemalloc java_jemalloc 5.0.0 全新版本发布,内存分配管理
- USB摄像头录制视频
- 双系统双硬盘安装(win7 64位+Ubuntu18.04)(固态硬盘+机械硬盘1T)小结
- 类人猿易语言云控系统开发 + 附加安卓模拟器中控+ 内存操控 系列课程
- 项目管理图表有哪些 这5种一定要知道
- C++程序避免触发 Win7下的程序兼容助手
- 学会这几项windows操作,轻松玩转自己的个人电脑
- 【大厂智力题】64匹马,8个赛道,找出前4名最少比赛多少场?
- 五、椒盐排骨(Pepper Salt Spareribs)
热门文章
- PC端微信dat图片怎么查看?这里有神器
- HUAWEI华为荣耀MagicBook V14 I5 集显 16GB+512GB (HGE-W56)原装出厂WIN11系统恢复原厂oem系统
- Ubuntu10.04 硬盘安装
- Nginx基本使用方法
- carplay_如何更改您的CarPlay壁纸
- IDEA报错private field “xxx“ is never assigned解决
- 玩转DWZ (一)---项目中怎么使用dwz
- 关于CreateProcess的问题
- 李宏毅——一天搞懂深度学习PPT学习笔记
- 黑客代码雨源代码_工业城黑客空间教授的东西比代码更有价值