文本剑客awk使用

一、awk(逐行处理)
 1.
功能与grep类似,语法和sed类似
 2.
格式

   awk [
选项] '条件{指令}' 文件
   awk 'BEGIN{}
条件{} ND{}' 文件
       BEGIN:
读文件前执行(一般用与初始化)
       {}:
逐行读入时执行相应的处理
       END:
读文件后执行
 3.
指令
  —print
打印
   awk
的内置变量:
      $0 
一整行
      $1 
第一列
      NF
当前有几列
      NR
当前行的行号
  #
也可以当作echo21来用,直接在print后面"接东西'',可以和变量同时执行,用,分隔。
 4.
选项
  —-F                                                        #
指定分隔符,默认为空格,如-F:
  —-v                                                        #
使用外部的shell变量
   awk -v X=2 '$1=x{print $2}'
文件                                   #当使用外部变量作条件时,不用加$
 5.
条件的表达形式
  —
正则表达式
    ~
匹配  !~不匹配
   awk '$1~/root/{
命令}'                                       #从第一列匹配root
  —
数值、字符串比较
   awk '$1=="root"{
命令}'                                      #精确查找第一列为root
  —
逻辑比较
    &&
逻辑与、||逻辑或
  —
运算符
  —
条件判断
   awk'{if($1=="M.Tansley")$6=$6-1;print$1"\t"$6"\t"$7}'    #
如果第一列为M.Tansley,第六列减一
. awkif判断
 1.
单分支:if(){}
  
双分支:if(){}else{}
  
多分支:if()
{} else if () {} else....
  — awk '{if($7==/bin/bash) {x++} else{y++}} END{print x,y}' /etc/passwd  #
统计能登陆的用户和不能登陆的数量。
 2.while () {}
 3.
求词出现的频率
  awk -F:'{i=1;while(i<=NF){if($i==”root“){x++};i++}} END{print x}' /etc/passwd  #
统计文件中出现了几次root,""为精确匹配~//为模糊u匹配
三、数组
 
shell基本相同。下标i可以是字符串
 
统计一列中数据出现的频率:
 
公式:awk '{变量[$1]++}'                           #统计,$1是统计第一行,可以更换
      END{for(i in IP){print i,IP[i]}}
文件           #打印,for循环中。循环的是IP的下标
#\t:
想要隔开时用来隔开,相当与Tab
#######################################################################

 —df | awk '/\/$/{print $4}'                                 #
根分区剩余容量                              
   free | awk '/Mem/{print $4}'                            #
存剩余容量                                     
   uptime | awk '{print $8}'                                  #CPU
负载                                      
   ifconfig enp1s0 | awk '/pack/{print$5}'           #
网卡流量
 —[root@server0 ~]# awk -F: 'BEGIN{print"
用户名\tUID\tShell"} /bash$/{print$1"\t"$3"\t"$7;i++} END{print "总用户量:",i}' /etc/passwd
  
用户名   UID Shell
  root  0   /bin/bash
  student   1000    /bin/bash
 
总用户量: 2                                                                  #打印表格
 — awk '{if($7==/bin/bash) {x++} else{y++}} END{print x,y}' /etc/passwd  #
统计能登陆的用户和不能登陆的数量。

发布了5 篇原创文章 · 获赞 1 · 访问量 188

猜你喜欢

转载自blog.csdn.net/weixin_40946381/article/details/79175762
今日推荐