网站首页 > 基础教程 正文
1.简介
awk是一个强大的文本分析工具。其把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。
基本语法格式:
awk 'BEGIN{ commands } pattern{ commands } END{ commands }'
一个awk脚本通常由3部分组成:BEGIN语句块、能够使用模式匹配的pattern语句块和END语句块
这三个部分是可选的,他们中任意一个部分都可以不出现在脚本中。
脚本通常被包含在引号或双引号中。
如果三部分都存在awk首先执行BEGIN模块内容,其次执行parttern模块内容,最后执行END模块内容
BEGIN语句块在awk开始从输入流中读取行之前被运行,通常我们在进行变量初始化、打印输出表格的表头等准备工作时,通过写在BEGIN语句块中执行这些工作。
pattern语句块中的通用命令是最重要的部分,大部分的逻辑(比如if else或循环等)会放在这个模块执行,但是它也是可选的。假设没有提供pattern语句块,则默认运行{ print },即打印每个读取到的行。awk读取的每一行都会运行该语句块。
END语句块在awk从输入流中读取全然部的行之后被运行。例如打印全部行的分析结果这类信息汇总都是在END语句块中完毕,它也是一个可选语句块。
2.awk的特殊变量
NR:表示记录数,在执行过程中对应于当前行号。
NF:表示字段数量,在执行过程中对应于当前行的字段。
$0:这个变量宝行执行过程中当前行的文本内容。
$1:这个变量包含第一个字段的文本内容。
$2:这个变量包含第二个字段的文本内容。
...
$n :当前记录的第n个字段,字段间由FS分隔,包含第n个字段的文本内容
FS: 输入字段分隔符 默认是空格或Tab
FNR: 当前记录数,与NR不同的是,这个值会是各个文件自己的行号(数据源可以为多个文件)
RS :输入的记录分隔符, 默认为换行符
OFS :输出字段分隔符, 默认也是空格
ORS :输出的记录分隔符,默认为换行符
3.参数
-v:传递外部参数给awk
-F:设置字段定界符,默认的字段定界符是空格。
例如:改变分隔符为“:”
awk -F ":"
还支持不同字符同为分隔符,例如下面 指定“:”和“,”作为分隔符
awk -F "[:,]+"
4.内建字符串控制函数
length(字符串):返回字符串的长度
index(字符串,搜索关键字):返回搜索关键字在字符串中出现的位置。
split(字符串,数组,定界符):用定界符生成一个字符串列表,并将该列表存入数组
substr(字符串,起始位置,结束位置):在字符串中用字符气质偏移量生成子字符串,并返回该子字符串。
sub(正则表达式,替换字符串,字符串):将正则表达式匹配到的第一处内容替换成“替换字符串”。
gsub(正则表达式,替换字符串,字符串):将正则表达式匹配到的所有内容替换成“替换字符串”。
match(正则表达式,字符串):检查正则表达式能否匹配字符串。如果是,返回非零值;否,返回零。
match有两个相关的特殊变量,分别是RSTART和RLENGTH。变量RSTART包含正则表达式匹配内容的启止位置。变量RLENGTH包含正则表达式匹配内容的长度。
猜你喜欢
- 2025-04-01 awk命令详解(awk命令详解. FNR=NR)
- 2025-04-01 shell——awk命令(shell awk split)
- 2025-04-01 Linux 三剑客之awk 命令(linux awk命令使用实例)
- 2025-04-01 每天一个Linux命令-(1)-awk(linux每天执行一次)
- 2025-04-01 Linux必学技能 | 17个案例带运维小白快速精通Awk命令,拿来即用
- 2025-04-01 Linux环境中的awk命令使用技巧(linux awk命令使用实例)
- 2025-04-01 Linux系统基础指令(四)——awk命令
- 2025-04-01 这些awk用法你会用几个(awk for in)
- 2025-04-01 12、linux命令-awk(linux 命令 awk)
- 2025-04-01 awk命令使用实例(awk中使用shell命令)
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)