一、awk介绍正则表达式
全称:Aho Weinberger Kernaighan 三我的的首字母缩写shell
grep 行过滤器express
-o -i -v取反 -E正则表达式 grep egrep fgrep(匹配速度最快)数组
sed 行编辑器bash
-n p 一、地址定界 二、命令 p a i w c \ s/pat/str/ g|&编辑器
awk 报告生成器函数
经过模式匹配以及本身自己的语言格式,来获取,并输入工具
【默认状况下,三个工具都不去编辑源文件】3d
FS=" "指定分隔符对象
二、awk原理
三、awk用法
awk 选项 ... 'program' file...
一、program 必须使用!单引号!
二、多条program语句使用大括号包含起来,能够并列,能够嵌套
awk '{print}' /etc/passwd
四、potion
-F 指定分隔符
awk -F[/:] '{print $1,$3}' a.txt
其中[ ]内表示多个字符中的任意一个
-v 由于awk是一种语言编辑器,能本身定义变量,同时也有内置变量(与环境变量相似)
手动指定变量参数
awk -v a="a/b" '{print }' a.txt
给a赋值,打印a这个变量
一、a是自定义变量 -v FS=":"
二、在awk中调用变量 不用加¥符号
awk '{a="a/b";print a}' a.txt
扩展: 了解cut 与awk的区别
五、awk本身的固定语法语句
一、print
默认输出(在屏幕上)
在awk中没有保存命令,咱们能够关联别的命令来保存awk的结果
awk '{a="a/b";print a}' a.txt | tee a.bak
二、printf ---实现格式化输出
格式符
%s 字符串
%d %i 数值
%e %E 科学计算数值
%c Acsii码值
%f 浮点数
%u 无符号整数
%% 逃逸符 只显示%本身
修饰符
默认为右对齐
- 表明左对齐
%5.4f
5 所占位属
4 所取小数位
三、变量(内置变量、自定义变量)
内置变量 ---环境变量(bash)(env、set -C +C)
awk语言所默认支持的变量
FS 定义输入分隔符的变量
OFS 定义输出分隔符的变量
NF 定义行分割之后的参数个数($NF 分割之后最后一列的变量)
变量引用的时候不用加$,$0,$1....$n
NR 定义文件的行数,定义多个文件的文件行,行号叠加
FNR 文集只计算本身的行号
begin{语句}只在行循环开始时,执行一次
ARGC 整个命令的段数 [注意:不包含'program'自己]
ARGV 数组,用来调用命令中,指定的段ARGV[2] 【注意:数组中也不包含'program'】
RS 指定换行符 \n能够指定新的换行符,不影响自己的换行
ORS 输出的时候指定的换行符,将默认换行符替换为指定字符
自定义变量
-v 变量=值
在后面'program'中去调用自定义变量时,直接使用便可或者将“变量=值”语句直接写 在’program‘亦可
四、模式匹配(地址定界)
一、空值、没有定义,默认就将文本全部的行,放入awk进行循环
二、对固定的1,3行进行操做
sed -n '1,3p' /etc/passwd
awk '1,3{print}' /etc/passwd ///awk默认不支持1-3 1,3等等,这样数值的直接写法;
awk 'NR>=1&&NR<=3{print}' /etc/passwd //经过NR变量来指定
三、/pat1/
sed -n /pat1/p /etc/passwd
awk '/r..ter/{print}' /etc/passwd
四、/pat1/,/pat2/ 第一次匹配pat1到第一次匹配pat2,之间的行
五、模式匹配能够直接使用判断语句
awk -F:'$NF=="/bin/bash"{print $1,$3}' /etc/passwd
六、BEGIN在默认循环进行操做前所要执行的语句;
五、操做符
运算操做符:
+ - * / % ** // ^
比较运算符
== ! = > < >= <=
~!~
逻辑操做符
&& || !
赋值操做符:
= += -= /= *= %= ^= //=
条件表达式:
语句条件? 条件成立语句;条件 不成立的语句
六、常见action
print printf 以及他任何命令的操做都是action
一、expressions
二、control statement 控制语句 例如: if while等
逻辑关系语句判断来进行结合
三、组合语句 compound statements
/pat1/{{ }{;}}
四、input statements输入语句
五、output statements 输出语句
七、常见语言(if while do for break continue )
一、if语句
语法格式:if(条件表达式){执行语句}
if(条件表达式){执行语句} else {执行语句}
awk '/^title/{if(NF<=2) {print}else {print "参数过少"}}' /boot/grup/grup.conf
awk '/^title/{if(NF>=2) print $4}' /boot/grup/grup.conf
二、while语句
只有对行参数进行遍历的时候才会使用循环;
语法格式:while(条件表达式){循环体}
八、数组
在awk中,数组和shell中的数组特性相同
注意:awk中数组不用定义,只要使用了,就有值为空的默认数组;这在作数据统计的时候很是常见!!!!!
行遍历 - --> 实际上就是整个文件的遍历
列遍历 ----> 取对象固定某列中的相同数据的统计
注意:数组经过for语句再给其余变量进行赋值的时候,赋值的是index索引信息;
九、函数
一、内置函数
函数的调用:funcation(参数)
length() 统计字符串长度
数学运算上使用的函数 sin() cos().....
sub(x,x,x) 替换第一个匹配到的值
gsub(x,x,x) 替换该行所匹配道德全部值
split(x,x,x) 指定分隔符去切割文件
二、自定义函数