awk介绍
awk是一种可以处理数据、产生格式化报表的语言,功能十分强大,awk认为文件中每一行是一条记录,记录与记录的分隔符为换行符,每一列是一个字段,字段与字段的分隔符默认是一个或多个空格或tab制表符。
awk的工作方式是读取数据,将每一行视为一条记录,每条记录以字段分隔符分成若干字段,然后输出各个字段的值
awk语法:awk [options][BEGIN]{program}[END][file]
常用命令选项:
-F fs 指定描绘一行中数据字段的文件分隔符,默认为空格
-f file 指定书读程序的文件名
-v var=value 定义awk程序中使用的变量和默认值
注意:awk程序脚本由左大括号和右大括号定义,脚本命令必须放置在两个大括号之间。
awk程序运行优先级是:
1) BEGIN:在开始处理数据流之前执行,可选项
2) program:如何处理数据,必选项
3) END:处理完数据流后执行,可选项
awk基本用法-awk数据提取功能
学习用例,数据源test.txt

1> awk对字段(列)的提取
字段提取:提取一个文本中的一列数据并打印输出
字段相关内置变量
$0 表示整行文本
$1 表示文本中的第一个数据字段
$2 表示文本中的第二个数据字段
$N 表示文本中的第N个数据字段
$NF 表示文本中的最后一个数据字段
1) awk '{print $0}' test.txt 读入text.txt每行数据并把每行数据打印出来

2) awk '{print $NF}' test.txt 读入text.txt每行数据并打印最后一列

3) awk '{print $3}' test.txt 读入text.txt每行数据并打印第三列

2> awk对记录(行)的提取
记录提取:提取一个文本中的一行并且打印输出
记录的提取方式有两种:a、通过行号b、通过正则匹配
记录相关内置变量
NR:指定行号
1) awk 'NR==3{print $0}' test.txt 获取test.txt第三行数据

2) awk -F ":" 'NR==1{print $1,$3,$5}' /etc/passwd 获取/etc/passwd第一行中第1、3、5列的数据,/etc/passwd中的字段以:作为分隔符,所以需要指定分隔符:

3> awk程序的优先级
关于awk程序的执行优先级,BEGIN是优先级最高的代码块,是在执行PROGRAM之前执行的,不需要提供数据源,因为不涉及到任何数据的处理,也不依赖与PROGRAM代码块;OROGRAM是对数据流做操作,是必选的代码块,也是默认的代码块,所以在执行的时候必须提供数据源;END是处理完数据流之后的操作,如果需要执行END代码块,就必须需要PROGRAM的支持,单个无法执行
1) awk 'BEGIN{print "hello lavender"}{print $0}END{print "bye lavender"}' test.txt

2) awk 'BEGIN{print "hello lavender"}' 不需要数据源 可以直接执行

3) awk '{print "hello lavender"}' awk 'END{print "hello lavender"}' 没有提供数据流,所以无法执行

4) awk '{print "hello lavender"}' test.txt

awk高级用法
1> awk定义数组
数组定义方式:数组名[索引]=值
awk 'BEGIN{array[0]=100;array[1]=200;print array[0],array[1]}'

awk中可以定义变量 head -2 /proc/meminfo |awk 'NR==1{t=$2}NR==2{f=$2;print (t-f)*100/t "%"}' 计算内存使用率

2> awk运算
1. 赋值运算 =
2. 比较运算 > >= == < <= !=
3. 数学运算 + - * / % ** ++ --
4. 逻辑运算 && ||
5. 匹配运算 ~ !~
1) 赋值运算,见上面的变量和数组定义
2) 比较运算 如果比较的字符串则按ascii编码顺序比较,如果结果返回为真则用1表示,如果返回为假则用0表示

3) 数学运算

4) 逻辑运算

5) 匹配运算


3> awk环境变量
FIELDWIDTHS 以空格分隔的数字列表,用空格定义每个数据字段的精确宽度
FS 输入字段分隔符号
OFS 输出字段分隔符号
RS 输入记录分隔符
ORS 输出记录分隔符号
awk 'BEGIN{FS=":";OFS="-"}$1=="root"{print $1,$3,$5}' /etc/passwd

4> 流程控制
1. if判断语句
2. for循环语句
3. while循环语句
4. do...while语句
5. 循环控制
学习用例;num.txt

1) 打印$1大于5的行

2) 累加

awk小技巧
1> 打印test.txt文本中的行数 awk 'END{print NR}' test.txt

2> 打印test.txt文本最后一行的内容 awk 'END{print $0}' test.txt

3> 打印test.txt文本中的总列数 awk 'END{print NF}' test.txt

本文详细介绍了awk编程语言,包括其对输出流的处理,awk的基本和高级用法,如字段和记录提取、数组定义、运算、环境变量以及流程控制。通过实例演示了awk如何用于数据提取,如打印特定字段、行号匹配和正则表达式匹配等。同时,文章还分享了一些awk的小技巧,如计算行数、列数和打印最后一行内容。
1413

被折叠的 条评论
为什么被折叠?



