awk工具使用

 awk是一个非常强大的文本报告生成器,用于输出格式化文本输出。

 awk:是由Aho,Weinberger,Kernighan三个人名命名

基本用法:

 swk [options] 'program' file

  program:PATTERN{ACTIONSTATEMENTS}

   语句之间用分号分隔

 选项:

  -F:指明输入时用到的字段分隔符

  -v var=value:自定义变量

输出命令:

 1、print

  print 项目1,项目2...

  要点:

   1、逗号做分隔符

   2、输出的各项目可以是字符串、数值、当前记录的字段、变量或awk的表达式

   3、如果省略项目,则相当于print $0:显示整行

 2、变量

  内建变量

   FS:输入字段分隔符,默认为空白字符

   OFS:输出字段分隔符,默认为空白字符

   RS:输入时的换行符

   ORS:输出时的换行符

   NF:字段数量

    {print NF}:显示字段数,{print $NF}:显示最后一个字段

   NR:文件行数,每行计数一次,多文件累积计数

   FNR:多个文件分别计数

   FILENAME:当前文件名

   ARGC:命令行参数的个数

   ARGV:数组,保存命令行所给定的各参数

  自定义变量

   1、-v var=value

    变量名区分大小写

   2、在program中直接定义

 3、printf命令

  格式化输出:printf 格式符,项目1,项目2...

   1、格式符必须要给出

   2、不会自动换行,需要显式给出换行控制符,\n

   3、格式符中需要分别为后面的没一个项目指定一个格式化符号

   格式符:

    %c:显示字符的ASCII码

    %d,%i:显示十进制整数

    %e,%E:科学计数法数值显示

    %f:显示为浮点数

    %g,%g:以科学计数法或浮点形式显示数值

    %s:显示字符串

    %u:无符号整数

    %%:显示%自身

   修饰符:

    #[.#]:第一个数字控制显示宽度;第二个数字表示小数点后精度

    -:左对齐

    +:显示数值的符号

 4、操作符

  算术操作符

   +,-,*,/,^,%

   -x:使数值变为负数

   +x:字符串转变为数值

  字符串操作符:没有符号的操作符,字符串连接

  赋值操作符

   =,+=,-=,*=,/=,%=,^=

   ++,--

  比较操作符

   >,>=,<,<=,!=,==

  模式匹配符

   ~:是否匹配

   !~:是否不匹配

  逻辑操作符

   &&

   ||

   !

  函数调用:

   函数名(参数1,2,...)

  条件表达式:

  条件表达式?为真执行语句:为假执行语句

 5、PATTERN

  1、empty:控模式(可以不加),匹配每一行

  2、/正则表达式/:仅处理正则表达式匹配到的行

  3、关系表达式:结果为“真”才会被处理

   真:结果为非0值,非空白字符串;

  4、/pat1/,/pat2/:地址定界(不支持直接给出数字)

  5、BEGIN/END模式:

   BEGIN{}:仅在开始处理文本之前执行一次;

   END{}:仅在文本处理完成之后执行一次;

  6、常用的action

   1.表达式

   2.控制语句:if,while等

   3.组合语句

   4.输入语句

   5.输出语句

  7、控制语句

   1.if-else

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

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

显示系统中的所有用户是系统用户还是普通用户
awk -F: '{if($3>=1000) {printf "Common user:%s\n",$1} else {printf "root or Syuser: %s\n",$1}}' /etc/passwd
   2.while循环

    语法:while(condition) statement

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

    使用场景:对一行内的多个字段逐一类似处理时试用;对数组中的各元素逐一处理时使用;

显示字段字符个数
awk '/^[[:space:]]*linux16/{i=1;while(i<=NF) {print $i,length($i);i++}}' /etc/grub2.cfg
   3.do-while循环

    语法:do statement while(condition)

     意义:至少执行一次循环体

   4.for循环

    语法:for(初始变量;变量赋值;控制修正) statement {for-body}

显示字段字符个数
awk '/^[[:space:]]*linux16/{for(i=1;i<=NF;i++) {print $i,length($i)}}' /etc/grub2.cfg

   5.switch语句

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

  statement;...;default: statement}

   6.break和continue

    break [n]

    continue

   7.next

    提前结束对本行的处理直接进入下一行;

   8.array

    关联数组:array[index-expression]

    index-expression:

     1.可使用任意字符串;字符串要使用双引号;

     2.如果某数组元素事先不存在,在引用时,awk会自动创建此元素,

    并将其值初始化为“空串”;

    若要判断数组中是否存在某元素,要使用“index in array”格式进行

    若要遍历数组中的每个元素,要使用for循环

     for(var in array) {for-body}

netstat -tan | awk -tan '/^tcp\>/{state[$NF]++}END{for(i in state) {print i,state[i]}}'
   9、函数

    1. 内置函数

     数值处理

      rand():返回0~1之间的一个随机数

     字符串处理:

      length([s]):返回指定字符串的长度;

      sub(r,s[,t]):以r表示的模式来查找t所表示的字符串中的匹配内容,并将

     其第一次出现替换为s所表示的内容;

      gsub(r,s[,t]):以r表示的模式来查找t所表示的字符串中的匹配内容,并将

     其所有出现替换为s所表示的内容;
      split(s,a[,r]):以r为分隔符切割字符s,并将切割后的结果保存至a所表示的数组中;

    2. 自定义函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值