awk控制语句

一、awk控制语句类型

{ statements;… } 组合语句

if(condition) {statements;…}

if(condition) {statements;…} else {statements;…}

while(conditon) {statments;…}

do {statements;…} while(condition)

for(expr1;expr2;expr3) {statements;…}

break

continue

delete array[index]

delete array

exit

二、if-else语句

语法:if(condition) statement [else statement]

if(condition1){statement1}else if(condition2){statement2} else{statement3}

使用场景:对awk取得的整行或某个字段做条件判断

示例:

awk -F: ‘{if($3>=1000)print $1,$3}‘ /etc/passwd

awk -F: ‘{if($NF=="/bin/bash") print $1}‘ /etc/passwd

awk ‘{if(NF>5) print $0}‘ /etc/fstab

awk -F: ‘{if($3>=1000) {printf "Common user: %s\n",$1} else {printf "root or Sysuser: %s\n",$1}}‘ /etc/passwd

awk -F: ‘{if($3>=1000) printf "Common user: %s\n",$1;else printf "root or Sysuser: %s\n",$1}‘ /etc/passwd

df -h|awk -F% ‘/^\/dev/{print $1}‘|awk ‘$NF>=80{print $1,$5}‘

awk ‘BEGIN{ test=100;if(test>90){print "very good"} else if(test>60){ print "good"}else{print "no pass"}}‘

三、while循环

语法:while(condition){statement;…}

条件“真”,进入循环;条件“假”,退出循环

使用场景:

对一行内的多个字段逐一类似处理时使用

对数组中的各元素逐一处理时使用

示例:

awk ‘/^[[:space:]]*linux16/{i=1;while(i<=NF) {print $i,length($i); i++}}‘ /etc/grub2.cfg

awk ‘/^[[:space:]]*linux16/{i=1;while(i<=NF) {if(length($i)>=10) {print $i,length($i)}; i++}}‘ /etc/grub2.cfg

四、do-while循环

语法:do {statement;…}while(condition)

意义:无论真假,至少执行一次循环体

示例:

awk ‘BEGIN{ total=0;i=0;do{

total+=i;i++;}while(i<=100);print total}‘

思考:下面两语句有何不同?

awk  ‘BEGIN{i=0;print ++i,i}‘

awk  ‘BEGIN{i=0;print i++,i}‘

五、for循环

语法:for(expr1;expr2;expr3) {statement;…}

常见用法:

for(variable assignment;condition;iteration process) {for-body}

特殊用法:能够遍历数组中的元素;

语法:for(var in array) {for-body}

示例:

awk ‘/^[[:space:]]*linux16/{for(i=1;i<=NF;i++) {print $i,length($i)}}‘ /etc/grub2.cfg

性能比较

time (awk ‘BEGIN{ total=0;for(i=0;i<=10000;i++){total+=i;};print total;}‘)

time (total=0;for i in {1..10000};do total=$(($total+i));done;echo $total)

time (for ((i=0;i<=10000;i++));do let total+=i;done;echo $total)

六、switch语句

语法:switch(expression) {case VALUE1 or /REGEXP/:

statement; case VALUE2 or /REGEXP2/: statement; ...; default: statement}

break和continue

awk ‘BEGIN{sum=0;for(i=1;i<=100;i++) {if(i%2==0){continue}sum+=i}print sum}‘

awk ‘BEGIN{sum=0;for(i=1;i<=100;i++) {if(i==66){break}sum+=i}print sum}‘

break [n]

continue [n]

next:

提前结束对本行处理而直接进入下一行处理(awk自身循环)

awk -F: ‘{if($3%2!=0) next; print $1,$3}‘ /etc/passwd

时间: 2024-10-21 14:54:53

awk控制语句的相关文章

Linux文本处理三剑客之GNU awk的使用

awk: Aho, Weinberger, Kernighan,报告生成器,格式化文本输出 有多种版本:New awk(nawk),GNU awk(gawk) gawk –模式扫描和处理语言 基本用法: awk[options] 'program' var=value file- awk[options] -f programfile var=value file- awk[options] 'BEGIN{ action;... } pattern{ action;... } END{ acti

文本处理三剑客之AWK

AWK的基本格式:    awk [options] 'program' file-          注释:     program->pattern{action statements;..}    pattern和action:    pattern部分决定动作语句何时触发及触发事件 (BEGIN,END)    action statements对数据进行处理,放在{}内指明 (print, printf) awk工作原理: 第一步:执行BEGIN{action;- }语句块中的语句 第

linux文本处理绝世好剑--awk

awk简介: awk的名称得自于它的创始人Aho, Weinberger, Kernighan三人的首字母. awk是一种数据处理工具,与"grep","sed"被称为linux文本处理三剑客,但相对于grep的查找,sed的编辑,awk擅长对数据分析并生成报告,是一种报告生成器,格式化文本输出,相对于sed常常作用于一整行的文本处理,awk则倾向于将一行分成数个"字段"来处理.因此awk更适合处理小型的数据. awk拥有自己的语言:awk程序设

awk应用

awk在CentOS操作系统中是一个软链接,链接到gawk程序上的.awk主要是对文件的行进行操作,将一行按照指定的方式进行切割. 一.awk工作机制 awk在处理文本流时,每一次会读取文本流中的一行并对这一行按指定的分隔符进行分隔,分隔后可以对每一个字段进行处理,其中输入的分隔符可以和输出的分隔符不一样,这些都是通过awk内置的变量来处理的. 二.awk命令运用 格式:awk [OPTIONS] 'program' FILE1 FILE2 ... 2.1 print 用法:print item

AWK运用

awk:报告生成器,格式化文本输出        有多种版本:New awk (nawk ),GNU awk(gawk)gawk:模式扫描和处理语言基本用法:awk [options] 'program' var=value file-awk [options] -f programfile var=value file-awk [options] 'BEGIN{ action;- } pattern{ action;- } END{action;- }' file -awk 程序通常由:BEG

awk.sed.grep三剑客详解

事前准备1.主机node1:172.16.133.112.作为实验的文件/etc/passwd /etc/fstab qinqin cp /etc/passwd . cp /etc/fstab . 一.grep用法详解1.grep是干什么的grep的全名是Galobal research Regular Expression and Pringtiong,即搜索正则表达式,也就是说grep简单来讲就是用来搜索匹配字符的2.grep分类grep有基本正则表达式和扩展正则表达式之分,不过她们的作用域

awk详解及举例

AWK语言 v  选项: -F  :指明输入时用到的字段分隔符 -v var=value: 定义变量 v  分割符.域和记录 awk 执行时,由 分隔符分隔的字段(域)标记$1,$2..$n称 称 为域标识.$0 为所有域,注意:和shell 中变量$ 符含义不同 文件的每一行称为记录 省略action行 ,则默认执行 print $0 的 的 $0:打印所有 v  示例: awk '{print "hello,awk"}' awk –F: '{print}' /etc/passwd

文本三剑客之awk进阶篇

此篇主要讲解awk控制语句,捎带说明getline和NR_FNR命令的使用.其中会用到awk基础知识,若有疑惑,可点击文本三剑客之awk基础篇进行翻阅. 示例文件 以下为通篇会用到的几个示例文件: [[email protected] awk_file]# cat file.txt name yu shu wai rick 80 86 90 long 68 89 78 jack 66 60 82 [[email protected] awk_file]# cat file.txt1 name y

awk基础语法与简单示例

awk介绍 ??awk:Aho, Weinberger, Kernighan,报告生成器,格式化文本输出 ?? 有多种版本:?? ??New awk(nawk),GNU awk( gawk) ????gawk:模式扫描和处理语言 ?? 基本用法: ???? awk [options] 'program' var=value file- ???? awk [options] -f programfile var=value file- ???? awk [options] 'BEGIN{ acti