剑客之awk"/>
Linux shell四剑客之awk
shell编程四剑客:find、grep、sed、awk
shell编程四剑客之find,主要用于查找Linux操作系统的某个文件/目录的路径;
shell编程四剑客之grep,抓取,主要用于过滤和匹配文件内容,以行为单位进行匹配;
shell编程四剑客之sed,流编辑器命令,用于文件的内容替换、追加、修改、删除等,类似vi编辑器,是一种非交互的编辑器;
shell编程四剑客之awk, 支持变量、功能函数、控制语句,主要用于对文本内容的过滤和匹配,比grep匹配的内容更加精确,更灵活进行匹配;
今天主介绍四剑客老大-------awk!
一、awk
awk能够进行文本处理和报表生产,经常用在linux日常处理的工作中
1、语法参数格式为:awk ‘pattern + {action}’ file
awk 选项 模式 动作 文件
2、语法详解
单引号时和shell命令区分开;
大括号{}表示一个命令分组;
pattern是要给过滤器,表示匹配pattern条件的行才进行action处理;
action是处理动作,常见动作为print
pattren和action可以只有其一,但不能都没有
3、选项
-F 指定输入时用到的字段分隔符
-v var=value:自定义变量
4、模式介绍
1)、BEGIN{ statements } 。
让用户指定在第一条输入记录被处理之前所发生的动作,通常可在这里设置全局变量
在输入被读取之前,statements执行一次
2)、END{ statements }
让用户在最后一条输入记录被读取之后发生的动作
当所有输入被读取完毕之后,statements执行一次
3)、expression{ statements }
关系表达式,可以用下面运算符表中的关系运算符进行操作,如%2>%1选择第二个字段比第一个字段长的行。
每碰到一个是expression为真的输入行,statements执行一次,expression为真指的是其值非零或非空
4)、/regular expression/ { statements }
通配符的扩展集
碰到这样一个输入行时,statements就执行:输入行含由一段字符串,而该字符串可以被regular expression匹配
5)、compound pattern { statements }
一个复合模式将表达式用&&(AND),(OR),!(NOT),以及括号组合起来;当compound pattern为真时,statements执行。
6)、pattern1,pattern2 { statements }
模式,模式,指定一个行的范围不能包括BEGIN和END模式
一个范围模式匹配多个输入行,这些输入行从匹配pattern1的行开始,到匹配pattern2的行结束(包括这两行),对这其中的每一行执行statements
5、动作
expression表达式,包括常量,变量,赋值,函数调用等等 。
print expression-list
printf(format,expression-list)
if(expression)statements
if (expression)statements else statements
while (expression) statements
for (expression in array)statements
for (expression in array) statements
do statements while (expression)
break
contnue
6、变量
$0所有内容,$1第一列, 2 第 二 列 , 2第二列, 2第二列,NF最后一列,$FN-1倒数第二列
各种变量如下:
7、运算符号
命令语句实例:
1、awk ‘{print $0}’ /etc/passwd
2、打印uid在30~40范围内用户名:awk -F: ‘$3>=30&&$3<=40{print $3}’ /etc/passwd
3、打印第5-10行的行号和用户名: awk -F: ‘NR>=5&&NR<=10{print $1,NR}’ /etc/passwd
4、打印机奇偶数行:awk -F: ‘NR%21{print NR,$0}’ /etc/passwd
5、打印字段数大于5的行:awk -F: ‘NF>6{print $0}’ /etc/passwd
6、打印UID不等于GID的用户名: awk -F: ‘$3!=$4{print $0}’ /etc/passwd
7、打印**1~100以内的7的倍数和包含7的数:seq 1 100 | awk '$1~/7/||$1%70{print $1}’*
8、计算UID相加的总和;计算GID相加的总和: awk -F: ‘{uid+=$3;gid+=$4}END{print uid;print gid}’ /etc/passwd
9、找出普通用户和用户名并统计数量: awk -F: ‘{if($3>=500) sum+=1}END{print sum}’ /etc/passwd
10、uid分组标记为:0 admin,1-499 sysuser,500 + users:awk 'BEGIN{FS=":";OFS="\t";print “用户名\tUID\t权限”}{if($3==0)print $1,$3,“admin”;else if($3<500)print $1,
更多推荐
Linux shell四剑客之awk
发布评论