美文网首页
AWK 基础

AWK 基础

作者: 冰舞one | 来源:发表于2018-12-09 09:13 被阅读0次

    1、通过man awk可知它的详情

    awk 是一种编程语言,awk有很多内建的功能,比如数组、函数等.....

    实例1通过awk得到IP

    [root@localhost ~]# ifconfig

    em1       Link encap:Ethernet  HWaddr 14:18:77:70:62:20

    inet addr:10.12.50.78  Bcast:10.12.50.255  Mask:255.255.255.0

    inet6 addr: fe80::1618:77ff:fe70:6220/64 Scope:Link

    UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

    RX packets:5893345 errors:0 dropped:0 overruns:0 frame:0

    TX packets:165708 errors:0 dropped:0 overruns:0 carrier:0

    collisions:0 txqueuelen:1000

    RX bytes:886835464 (845.7 MiB)  TX bytes:160953846 (153.4 MiB)

    Interrupt:41

    [root@localhost ~]#ifconfig em1|awk -F '[ :]+' 'NR==2 {print $4}'

    10.12.50.78

    [root@localhost ~]#

    awk相关解释: -F 是指定分隔符;'[ :]+ ' 代表正则;中括号内的是要匹配的内容;‘+’代表匹配连续多个。例子中代表匹配多个空格及“:"作为分隔符;NR 是awk的内置变量代表行 $4 代表第4列;print 是输出;

     inet    addr:10.12.50.78

    第1列   第2列  第3列   第4列

    (1、2,3列是以空格为分隔符) (3,4是以“ : ” 分隔符)

    注意:awk 后跟的语句必须用单引号包含

    [root@localhost ~]# ifconfig em2|awk -F "[ :]+"'NR==2 {print $4}'  

    10.11.45.90

    [root@localhost ~]# ifconfig em2|awk -F "[ :]+" "NR==2 {print $4}"

    inet addr:10.12.50.78  Bcast:10.12.50.255  Mask:255.255.255.0

    实例2通过awk得到行号,得到列

    [root@localhost ~]#awk  '{print NR,$0}' /etc/passwd  

    1 root:x:0:0:root:/root:/bin/bash

    2 bin:x:1:1:bin:/bin:/sbin/nologin

    3 daemon:x:2:2:daemon:/sbin:/sbin/nologin

    [root@localhost ~]#

    实例相关解释:NR(每行的记录号,多文件记录递增)代表行;$0代表整行内容;$1代表第一列$2第二列$3.....$NF最后一列,$(NF-1)

    [root@localhost ~]# awk  -F ":" '{print $(NF-1)":"$NF}' /etc/passwd 

    /root:/bin/bash

    /bin:/sbin/nologin

    /sbin:/sbin/nologin

    /var/adm:/sbin/nologin

    /var/spool/lpd:/sbin/nologin

    /sbin:/bin/sync

    /sbin:/sbin/shutdown

    实例3通过awk 取出5到8行的内容

    [root@localhost ~]#awk  '{if(NR<9 && NR>4) print NR,$0}' /etc/passwd  

    5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

    6 sync:x:5:0:sync:/sbin:/bin/sync

    7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

    8 halt:x:7:0:halt:/sbin:/sbin/halt

    [root@localhost ~]#

    实例4通过awk过滤空格或#

    原数据

    [root@localhost ~]# cat awke 

    #Include conf/extra/httpd-ssl.conf

    #

    # Note: The following must must be present to support

    #       starting without SSL on platforms with no /dev/random equivalent

    #       but a statically compiled-in mod_ssl.

    #

    SSLRandomSeed startup builtin

    SSLRandomSeed connect builtin

    [root@localhost ~]#

    处理后的数据

    [root@localhost ~]# awk '/^[^ ]/' awke 

    #Include conf/extra/httpd-ssl.conf

    #

    # Note: The following must must be present to support

    #       starting without SSL on platforms with no /dev/random equivalent

    #       but a statically compiled-in mod_ssl.

    #

    SSLRandomSeed startup builtin

    SSLRandomSeed connect builtin

    [root@localhost ~]# awk '/^[^ #]/' awke

    SSLRandomSeed startup builtin

    SSLRandomSeed connect builtin

    实例相关解释 '/^[^#]/';

    红的^排除[]里的内容;中括号内的橙黄色^是以空格开头

    实例5awk计算内存占用率

    [root@localhost ~]# free -m

    total       used       free     shared    buffers     cached

    Mem:         31994       3593      28401          0        175       1175

    -/+ buffers/cache:       2242      29751

    Swap:        16063          0      16063

    [root@localhost ~]# MEMUsed=$(free -m|egrep "Mem"|awk '{print $3}')

    [root@localhost ~]# MEMTotal=$(free -m|egrep "Mem"|awk '{print $2}')

    [root@localhost ~]# MEMUsage=$(awk 'BEGIN{printf"%.0f\n",('$MEMUsed'/'$MEMTotal')*100}')

    [root@localhost ~]# echo  $MEMUsage

    11

    [root@localhost ~]#

    [root@localhost ~]# MEMUsage=$(awk 'BEGIN{printf"%.2f\n",('$MEMUsed'/'$MEMTotal')}')

    [root@localhost ~]# echo  $MEMUsage

    0.11

    实例5相关解释:awk 指定输出格式

    awk 'BEGIN{printf"%.2f\n",('$MEMUsed'/'$MEMTotal')*100}'

    printf

    %f                                     浮点型 #使用小数点后2位%.2f (用于除法后)

    BEGIN与END的作用是给程序赋予初始状态和程序结束后执行扫尾的工作;任何在BEGI 之后列出的操作({}内)awk开始扫描输入之前执行,END扫描全部的输入之前执行结束之后执行。通常使用BEIN来显示变量和初始化变量,使用END来输出最后的结果。

    [root@localhost  ]# awk 'BEGIN{array[1]="abc";array[2]="efg";for(key in array) print key,array[key]}'   不需要跟文件

    1 abc

    2 efg

    [root@localhost ]#

    [root@localhost ~]# echo qw> /home/a.log

    [root@localhost ~]# awk '{array[1]="abc";array[2]="efg";}END{for(key in array) print key,array[key]}' /home/a.log ##后跟任意文件才能输出结果

    1 abc

    2 efg

    相关文章

      网友评论

          本文标题:AWK 基础

          本文链接:https://www.haomeiwen.com/subject/cpzqhqtx.html