专业编程基础技术教程

网站首页 > 基础教程 正文

快速学习awk编程(一)(awk程序)

ccvgpt 2025-04-01 16:18:32 基础教程 4 ℃

1.简介

awk是一个强大的文本分析工具。其把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

快速学习awk编程(一)(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有两个相关的特殊变量,分别是RSTARTRLENGTH。变量RSTART包含正则表达式匹配内容的启止位置。变量RLENGTH包含正则表达式匹配内容的长度。

Tags:

最近发表
标签列表