母婴网站模板,wordpress去除幻灯片,php网站开发if的代码,网页设计的毕业设计目录
一.概述
二.工作原理
三.工作流程
1.运行模式
2.运行流程
四.基本语法
1.命令格式
2.常用变量
五.变量类型
1.内建变量
2.内置变量
3.BEGIN END运算
4.awk高级用法
5.awk if语句
6.BEGIN END循环 一.概述
AWK是一种处理文本文件的语言#xff0c;是一…目录
一.概述
二.工作原理
三.工作流程
1.运行模式
2.运行流程
四.基本语法
1.命令格式
2.常用变量
五.变量类型
1.内建变量
2.内置变量
3.BEGIN END运算
4.awk高级用法
5.awk if语句
6.BEGIN END循环 一.概述
AWK是一种处理文本文件的语言是一个强大的文件分析工具。
它是专门为文本处理设计的编程语言也是行处理软件通常用于扫描过滤统计汇总等工作数据可以来自标准输入也可以是管道或文件。
二.工作原理
逐行读取文本默认以空格或tab键为分隔符进行分隔将分隔所得的各个字段保存到内建变量中并按模式或者条件执行编辑命令sed命令常用于一整行的处理而awk比较倾向于将一行分成多个字段然后再进行处理。
awk信息的读入也是逐行读取的执行结果可以通过print的功能将字段数据打印显示。在使用awk命令的过程中可以使用逻辑操作符“表示与”、||表示或、!“表示非”还可以进行简单的数学运算如、-、*、/、%、^分别表示加、减、乘、除、取余和乘方
三.工作流程 读取数据awk从指定的数据文件中逐行读取文本数据。更新内置变量在读取数据的过程中awk会自动更新其内置的系统变量如列数变量NF、行数变量NR、当前行0以及各个列变量0以及各个列变量0以及各个列变量1、$2等。执行匹配模式及其操作对于每一行数据awk会检查是否有匹配的模式pattern及其对应的操作actions。如果匹配成功则执行相应的操作。如果没有指定模式则默认对所有行执行操作如果没有指定操作则默认输出匹配的行。重复处理当一行数据处理完毕后如果数据文件中还有未读取的数据行awk会返回到第一步继续读取和处理下一行数据直到所有数据都被处理完毕。 此外awk还支持BEGIN和END语句块BEGIN语句块在开始处理数据前执行通常用于初始化变量或执行一些预处理操作END语句块在处理完所有数据后执行通常用于汇总结果或进行最后的处理
1.运行模式
1、正则表达式
2、关系表达式
3、组合的Pattern (4) 、Pattern1,Pattern2 (5) 、BEGIN (6) 、END
2.运行流程 首先awk的基本语法为 awk ‘pattern{actions}’,其中pattern代表匹配模式actions表示要执行的操作pattern和actions都是可选的但是两者必须至少有一个 工作流程反复执行4个步骤 1、自动从指定的数据文件中读取行文本 2、自动更新awk的内置系统变量的值例如列数变量NF、行数变量NR、行变量$0以及各个列变量$1、$2等 3、依次执行程序中所有的匹配模式及其操作 4、当执行完程序中所有的匹配模式及其操作之后如果数据文件中仍然还有未读取的数据行则返回到第1步重复执行1-4的操作。 awk程序结构
开始块BEGIN BLOCK主体块Body block结束块END block 四.基本语法
1.命令格式 awk 选项 模式或条件 {操作} 文件 1 文件 2 … awk -f 脚本文件 文件 1 文件 2 … 2.常用变量
FS指定每行文本的字段分隔符默认为空格或制表位。NF当前处理的行的字段个数。在执行过程中对应于当前的字段数NF列的个数NR当前处理的行的行号序数。 在执行过程中对应于当前的行号$0当前处理的行的整行内容。$n当前处理行的第 n 个字段第 n 列。比如: $1 表示第一个字段$2 表示第二个字段FILENAME被处理的文件名(当前输入文件的名)。FNR 各文件分别计数的行号OFS 输出字段分隔符默认值是一个空格ORS 输出记录分隔符默认值是一个换行符RS:行分隔符。awk从文件上读取资料时,将根据Rs的定义把资料切割成许多条记录, 而awk一次仅读入一条记录,以进行处理。预设值是 \n简说数据记录分隔默认为\n即每行为一条记录
五.变量类型
1.内建变量
FS指定每行文本的字段分隔符默认为空格或制表位。NF当前处理的行的字段个数。在执行过程中对应于当前的字段数NF列的个数NR当前处理的行的行号序数。 在执行过程中对应于当前的行号$0当前处理的行的整行内容。$n当前处理行的第 n 个字段第 n 列。比如: $1 表示第一个字段$2 表示第二个字段FILENAME被处理的文件名(当前输入文件的名)。FNR 各文件分别计数的行号OFS 输出字段分隔符默认值是一个空格ORS 输出记录分隔符默认值是一个换行符RS:行分隔符。awk从文件上读取资料时,将根据Rs的定义把资料切割成许多条记录, 而awk一次仅读入一条记录,以进行处理。预设值是 \n
1print案例 以[:/]为分隔符打印出第九列 2.内置变量
awk常用内置变量$1、$2、NF、NR、$0$1代表第一列$2代表第二列以此类推$0代表整行NF一行的列数NR行数
打印出含有root的整行内容 打印出含有root的行数的第一列 打印出每一行的行号和内容 3.BEGIN END运算
逐行执行开始之前执行什么任务结束之后再执行什么任务用BEGIN、ENDBEGIN一般用来做初始化操作仅在读取数据记录之前执行一次END一般用来做汇总操作仅在读取完数据记录之后执行一次 awk -F: $1root /etc/passwd 其他内置变量的用法 FS 输入、 OFS 、 NR 、 FNR 、 RS 、 ORS FS 输入字段的分隔符 默认是空格 OFS 输出字段的分隔符 默认也是空格 FNR 读取文件的记录数行号从 1 开始新的文件重新重 1 开始计数 RS 输入行分隔符 默认为换行符 ORS 输出行分隔符 默认也是为换行符 awk BEGIN{FS:}{print $1} pass.txt // 在打印之前定义字段 分隔符为冒号 awk BEGIN{FS:;OFS---}{print $1,$2} pass.txt #OFS 定义了输出时以什么分隔 $1$2 中间要用逗号分隔因为逗号默认被映射为 OFS 变量而这个变量默认是 空格 4.awk高级用法
定义引用变量 seq 10 | awk {getline;print $0} 显示偶数行 seq 10 | awk {print $0;getline} 显示奇数行 5.awk if 语句 awk -F: {if($310){print $0}} /etc/wjh // 第三列小于 10 的 打印整行 awk -F: {if($310){print $3}else{print $1}} /etc/wjh // 第三列小于 10 的打印第三列否则打印第一列 6.BEGIN END 流程
awk还支持for循环、while循环、函数、数组等 其他 awk BEGIN{ commands } pattern{ commands } END{ commands } 第一步运行BEGIN{ commands }语句块中的语句。 第二步从文件或标准输入(stdin)读取一行。然后运行pattern{ commands }语句块它逐行扫描文件从第一行到最后一行反复这个过程。直到文件所有被读取完成。 第三步当读至输入流末尾时运行END{ commands }语句块。 BEGIN语句块在awk开始从输入流中读取行之前被运行这是一个可选的语句块比方变量初始化、打印输出表格的表头等语句通常能够写在BEGIN语句块中。 END语句块在awk从输入流中读取全然部的行之后即被运行。比方打印全部行的分析结果这类信息汇总 都是在END语句块中完毕它也是一个可选语句块。 pattern语句块中的通用命令是最重要的部分它也是可选的。假设没有提供pattern语句块则默认运 行{ print }即打印每个读取到的行。awk读取的每一行都会运行该语句块。 [rootlocalhost ~] #awk BEGIN{x0};/\/bin\/bash$/ {x;print x,$0};END {print x} /etc/passwd # 统计以 / bin/bash 结尾的行数等同于 [rootlocalhost ~] #grep -c /bin/bash$ /etc/passwd [rootlocalhost ~] #awk BEGIN {FS:} ;{if($31000){print}} /etc/passwd # 先处理完 BEGIN 的内容再打印文本里面的内容 # 输出第 7 个字段既不为 /bin/bash 也不为 /sbin/nologin 的所有行 [rootlocalhost ~] #awk -F: ($NF ! /bin/bash)($NF ! /sbin/nologin ) {print NR, $0} passwd 通过管道、双引号调用 shell 命令 : [rootlocalhost ~] #echo $PATH | awk BEGIN{RS:};END {print NR} # 统计以冒号分隔的文本段落数 END{ } 语句块中往往会放入打印结果等语句 [rootlocalhost ~] #echo $PATH | awk BEGIN{RS:};{print NR,$0};END {print NR} [rootlocalhost ~] #awk -F: /bash$/{print | wc -l} /etc/passwd # 调用 wc -l 命令统计使用 bash 的用户个数 , 等同于 grep -c bash$ etc/passwd [rootlocalhost ~] #awk -F: /bash$/ {print} /etc/passwd | wc -l [rootlocalhost ~] #free -m |awk /Mem:/ {print int($3/($3$4)*100)%} # 查看当 前内存使用百分比