zoukankan      html  css  js  c++  java
  • Linux之awk命令

    • awk是一种可以处理数据,产生格式化报表看的语言;
    • awk认为文件中的每一行是一条记录,记录与记录一般用换行符分割;
    • awk认为文件中的每一列是一个字段,字段与字段一般用空格或 ab分割;

    FS 指定输入字段分隔符;
    OFFS 指定输出字段分隔符;

    RS 指定输入行分隔符
    ORS 指定输出行分隔符

    1.awk 打印硬盘设备名称,默认以空格为分割
    df -h|awk '{print $1}'
    
    2.awk 以空格,冒号, ,分号为分割
    awk -F '[ :	;]' '{print $1}' /data/old.txt
    
    3.awk 以冒号为分割,打印第一列,同时将内容追加到/tmp/awk.log 文件中
    awk -F: '{print $1>>"/tmp/awk.log"}' /data/dks.txt
    
    4.打印/data/old.txt 文件中第 3 行至第 5 行,NR 表示打印行,$0 表示文本所有域
    awk 'NR==3,NR==5{print}' /data/old.txt
    awk 'NR==3,NR==5{print $0}' /data/old.txt
    
    5.打印/data/old.txt 文件中第 3 行至第 5 行的第一列与最后一列
    awk 'NR==3,NR==5{print $1,$NF}' /data/old.txt
    
    6.打印/data/old.txt 文件中,长度大于 80 的行号
    awk 'length($0)>80 {print NR}' /data/old.txt
    
    7.AWK 引用 Shell 变量,使用-v 或者双引号+单引号即可
    awk -v name=zhangsan '{print name,$NF}' /data/old.txt
    name=zhangsan;echo |awk '{print "'${name}'";}'
    
    8.awk 以冒号切割,打印第一列同时只显示前 5 行
    awk -F: 'NR>=1&&NR<=5 {print $1}' /etc/passwd
    
    9.awk 指定文件 awk.sum 第一列的总和
    awk '{sum+=$1} END{print sum}' awk.sum
    
    10.awk NR 行号除以 2 余数为 0 则跳过该行,继续执行下一行,打印在频幕上
    awk -F: 'NR%2==0 {next} {print NR,$1}' /etc/passwd
    
    11.awk 添加自定义字符 ip_ ,并打印出 ip 地址
    ifconfig eth0 |grep "inet "|awk '{print "ip_"$2} '
    
    12.awk 与 if 组合,判断数字比较
    echo 3 2 1| awk '{if(($1>$2)||($1>$3)){print $2}else{print $1}}'
    
    13.awk 与数组组合,统计 passwd 文件用户数
    awk -F: 'BEGIN{count=0;} {name[count]=$1;count++;};END{for(i=0;i<NR;i++)print i,name[i]}' /etc/passwd
    
    14.awk 分析 Nginx 访问日志的状态码 404、502 等错误信息页面,统计次数大于 20 的 IP 地址
    awk '{if ($9~/502|499|500|503|404/) print $1,$9}' access.log|sort|uniq –c|sort –nr | awk '{if($1>20) print $2}'
    
    15.awk 统计服务器状态连接数
    netstat -an |awk '/tcp/ {s[$NF]++} END{for(a in s) {print a,s[a]}}'
    netstat -an |awk '/tcp/ {print $NF}' | sort | uniq -c
    
    16.打印文本最后一行
    awk -n '$=' file.txt
    
    17.打印行数
    awk 'END{print NR}' file.txt
    
    18.打印列数
    awk 'END{print NF}' file.txt 
    
    19.awk流程控制
    awk '{if($1>5) print $0}' file.txt
    
    #实现$1+$2+$3
    awk '{sum=0;for(i=1;i<4;i++){sum+=$i}print sum}' file.txt
    
    awk '{sum=0;i=1;while(sum<150){sum+=$i;i++}print sum}' file.txt
    
  • 相关阅读:
    Mysql免安装版脚本
    在防火墙的例外中注册程序(Windows7和XP),改写注册表
    与内存有关的那些事儿(数组分配空间不够,导致缓冲区溢出,从而strcpy会出现异常)
    WPF入门介绍
    vs2008编译QT开源项目--太阳神三国杀源码分析(三) 皮肤
    TOGAF架构开发方法(ADM)之迁移规划阶段
    LoadTest中内存和线程Troubleshooting实战
    BeginInvoke与EndInvoke方法解决多线程接收委托返回值问题
    工具条OutLookBar
    Winform开发框架之通用高级查询模块
  • 原文地址:https://www.cnblogs.com/IMSCZ/p/12175151.html
Copyright © 2011-2022 走看看