awk5个使用场景

awk简介

  1. 首先要知道awk的使用场景,需了解awk有哪些优势与短板。
  2. 关于个人近期学习awk总结其优势:
    • awk对文本的处理运算效率同比其他工具效率高很多(比shell的for循环高10倍以上,运算比bc计时器也高很多)
    • awk默认可对多个空格进行列切分,需要再借助其他工具。
    • awk可以对任意多个字符进行列分隔。
    • 如果文本列很多,可通过NF定位到最后一列获取列数据。
    • awk工具处理文本的命令非常丰富,几乎可以看成一套完整的编程语言。
  3. 缺点
    • awk无法修改文本文件。

awk案例

  1. 案例场景:/etc/passwd 第一列、第三列、最后一列

    awk -F":" '{printf "%-20s%-3s%15s/n",$1,$3,$NF}' /etc/passwd 

    image-20220831225737843

  2. 案例场景:获取内存信息、IP地址信息、磁盘分区信息

    内存信息:

    free -h|awk '/^Mem/{printf"已使用内存:%s/n当前空闲内存:%s/n内存使用率:%.2f%/n",$4,$3,$3/$2*100}' 

    image-20220831231010598

    IP地址:

    ip address show eth0 |awk -F" +|/" '/inet/{printf"IP地址:%s/n",$3}' 

    image-20220831232513661

    磁盘信息:

    df -h|awk -v i=0 -F" +|/" '///dev//(nvm|sdb)/{i++ ;printf"%s.分区名称:%s/t大小:%s/t已使用:%s/t使用率:%s/n",i,$3,$4,$5,$7}' 

    image-20220831234456014

  3. 案例场景:做简单循环,写一个九九乘法表并统计运行时间,以及比较shell for循环的运算时间

    time(awk 'BEGIN{for(i=1;i<=9;i++){ for(j=1;j<=i;j++){  printf"%s*%s=%s/t",i,j,i*j;if(j==i){printf"/n"}  }}}') 

    image-20220901000305111

    time(for((i=1;i<=9;i++)) ;do for(( j=1;j<=i;j++)) ;do  echo -en "$i*$j=$((i*j))  " ; if(($i==$j)) ;then echo -e "/n" ;fi   ;done ;done) 

    image-20220901001431856

  4. 案例场景:做多循环运算再统计运行时间,比较shell for循环运算时间

    time(awk -v num=0 'BEGIN{for(i=1;i<=1000000;i++){  num+=i};print num}') 

    image-20220901002211304

    time( num=0;for((i=1;i<=1000000;i++)) ;do let num=$((num + i)) ;done ;echo $num) 

    image-20220901003152164

  5. 案例场景:统计用户访问站点IP的个数,以apache日志为例

    cat /var/log/httpd/access_log-20220828|awk '{ ips[$1]++ }END{for(i in ips){print i,ips[i]}}' 

    image-20220901010031115

商匡云商
Logo
注册新帐户
对比商品
  • 合计 (0)
对比
0
购物车