zoukankan      html  css  js  c++  java
  • awk用法

    awk用法

    简介

    一)Pattern模式:
    1)正则表达式,
    只处理以r开头的行:awk -F : '/^r/ {printf $1}' /etc/passwd
    2)表达式:awk -F : '($3>500)|| ($1=="/bin/bash") {print $1 }' /etc/passwd
    3)指定匹配范围
    4)BEGIN,END特殊模式
    BEGIN:只在脚本运行前就就执行一次。
    END:在脚本运行结束以后执行一次
    二)action:
    1)控制语句 if(条件)
    awk -F : '{if ($1=="root") print $1 }' /etc/passwd
    2)while循环
    3)for循环 for(i=1;i<3;i++)
    4)next 提前结束对文本本行的处理,并接着处理下一行
    遍历数组,for(var in array) awk数组下标从1开始,数组下标可以使用任意字符串
    1)显示出系统中用户的用户名,用户ID,及主目录
    [root@sky mnt]# awk -F : '{print $1,$3,$6}' /etc/passwd | head -3
    OFS:指定输出符

    2)输出系统中所有用户名及相应的ID表格,并在表格的第一行为这两数添加标题。

    [root@sky mnt]# cat 2.sh 
    #!/bin/bash
    BEGIN {
    	printf "%-15s%s
    ","username","uid"
    	printf "******************
    "
    
    }
    {
    	printf "%-15s%s
    ",$1,$3
    }
    

    如果程序很长可以先将程序保存在文件中,然后传递给awk . - f 可指定文件
    3)打印出文件的第一行的和
    [root@sky mnt]# gawk '{ sum += $1 }; END { print sum }' 3.sh

    4)打印出系统中用户的ID数大500
    [root@sky mnt]# awk -F : '$3>500 {printf "USER:%-15sUID:%s ",$1,$3}' /etc/passwd

    5)打印出用户ID大于500,或者使用bash shll的用户

    awk -F : '$3>500 {print $1;next} $7=="/bin/bash" {printf $1}' /etc/passwd
    
    awk -F : '($3>500)|| ($1=="/bin/bash") {print $1 }' /etc/passwd
    

    6)找到被修改的文件,并计算这些文件的大小

    [root@server1 mnt]# sh 6.sh 
    filename:               
    filename:14:47          54
    filename:15:43          75
    filename:15:24          141
    filename:19:01          13
    filename:19:30          119
    filename:03:27          146
    **********
    the sum is 548
    

    7)打印出/etc/passwd中的偶数行

    #!/bin/bash
    #******************
    #*copyleft maisui2016-03-13
    #*version 1
    awk '
    	BEGIN {FS=":"}
    	NR%2==0{
    	print NR,$0;
    }' /etc/passwd
    exit 0
    

    或命令行的形式: awk 'BEGIN {FS=":";} NR%2==0 {print NR,$0;}' /etc/passwd
    解释:awk 在进入主循环以后读取第一行的数据,内建变量NR的值是1,以后每读取一行数据,NR变量的数据就会自动加1,
    内健变量:
    NR:所处理的所有记录的行数
    FS:输入行的字符分隔符
    NF:当前记录中所包含的字段个数
    OFS:输出时字段分割符
    RS:输入时的记录分割符,默认使换行符
    ORS:输出时的记录分割符,默认是换行符
    9)找出ID大于120的用户,用if语句

    [root@server4 3131]# awk -F : '{if ($3>120) printf "username:%-8s UID:%-5s
    ",$1,$3}' /etc/passwd
    username:saslauth UID:499  
    username:nagios   UID:500  
    username:varnish  UID:498  
    

    10)写一个脚本递归描述一个目录下的所有文件,然后根据文件的所有者统计出每一个用户所用有的文件个数。

    [root@desktop0 mnt]# ls -lR /mnt/ | awk '/^-/ {result[$3]++} END {for (s in result) {print s,result[s]}}'
    kiosk 2
    root 16
    

    11)统计TCP的连接数

    [root@desktop0 mnt]# netstat -ant | awk '/^tcp/ {STATE[$NF]++} END {for (s in STATE) {print s,STATE[s]}}'
    LISTEN 13
    ESTABLISHED 2
    

    12)统计日志中文件IP的访问量

    [root@desktop0 httpd]# awk ' /^[0-9]/ {count[$1]++} END {for (tcp in count) {printf "%-20s:%-10s
    ",tcp,count[tcp]}}' access_log-20160221
    172.25.254.222      :32        
    172.25.254.112      :22      
    
  • 相关阅读:
    使用 SVN Hook 实现服务器端代码自动更新
    在Windows下配置svn服务端钩子程序(部分)
    @RequestParam,@PathParam,@PathVariable等注解区别
    @ConditionalOnProperty 详解
    Spring MVC之@RequestParam @RequestBody @RequestHeader 等详解
    Ajax中Delete请求参数 后台无法获取的解决方法(Restful风格)
    原生JS和jQuery版实现文件上传功能
    捡芝麻与捡西瓜
    在行动中思考
    日常相关的标准技术和组织
  • 原文地址:https://www.cnblogs.com/hanfei-1005/p/5707012.html
Copyright © 2011-2022 走看看