zoukankan      html  css  js  c++  java
  • shell——awk

    awk -F"分隔符" "command" filename
    
    awk -F":" '{print $1}' /etc/passwd

     字段引用:

    $1代表第一列$2代表第二列$0代表所有列

    内置变量:

    FS  代表输入的分隔符,等同于-F
    OFS  代表输出的分隔符
    NF  代表字段数,因为NF是列数,所以$NF代表最后一列
    NR  代表当前处理第几行

    关系操作符:

    ==  等于
    !=  不等于
    >  大于
    <  小于
    >=  大于等于
    <=  小于等于

    逻辑操作符

    &&  逻辑与,类似于shell的[ 条件1 -a 条件2 ]
    ||  逻辑或,类似于shell的[ 条件1 -0 条件2 ]
    !  非

    运算符

    + - * /
    ^或**  幂

    awk可以运算浮点数

    echo $[1.2*3]  #错误
    echo | awk '{print 1.2*3}'  #正确

     练习

    截取所有开放监听的TCP协议端口号
    netstat -ntl | awk 'NR>2 {print $4}' |awk -F: '{print $NF}'
    
    /etc/passwd文件
    截取前五行的倒数第二列
    awk -F: 'NR<=5 {print $(NF-1)}' /etc/passwd
    打印第五行
    awk -F: 'NR==5 {print $0}' /etc/passwd
    打印第五行第五列
    awk -F: 'NR==5 {print $5}' /etc/passwd
    awk -F: '{if (NR==5) print $5}' /etc/passwd
    打印第五行和第六行
    awk -F: 'NR==5 || NR==6 {print $0}' /etc/passwd
    awk -F: 'NR>=5 && NR<=6 {print $0}' /etc/passwd
    打印每行的列数
    awk -F: '{print ""NR"行有"NF""}' /etc/passwd
    打印奇数行,并加上行号
    awk 'NR%2==1 {print NR,$0}' /etc/passwd

    截取IP地址,-F后[.:]表示以.或:做分隔符
    ifconfig |grep Bcast|awk -F[.:] '{print $2}'

    时间可以直接比较

    cat test.txt
    A 2016-11-15 19:20:12
    B 2016-11-15 18:12:31
    C 2016-11-15 17:58:59
    
    找出18:30之前的记录
    awk '$3<"18:30:00" {print $0}' test.txt
    
    注:时间必须写成09:00:00,不能写成9:00:00

     BEGIN和END

    awk -F: 'BEGIN{处理文件前执行的代码块,可以用于赋值或者打印首行表头} {处理文件过程中的代码块,行处理} END{处理文件后的代码块}' file

    printf格式化输出

    %s    代表字符串
    %d    代表十进制数字
    
    ls -l /etc |awk 'NR>1 {print $5,$NF}'
    ls -l /etc |awk 'NR>1 {printf("%d %s
    ",$5,$NF)}'    结果同上
    ls -l /etc |awk 'NR>1 {printf("%4d %s
    ",$5,$NF)}'    $5保留4位
    ls -l /etc |awk 'NR>1 {printf("%04d %s
    ",$5,$NF)}'    $5保留4位,不足4位用0补齐

     字符匹配

    == 完全精确匹配
    ~    匹配
    !~    不匹配
    !=    不相等
    
    awk -F: '$1=="root" {print $0}' /etc/passwd
    awk -F: '$1~"oo" {print $0}' /etc/passwd
    awk -F: '$1!~"oo" {print $0}' /etc/passwd
     

    字符串函数

    长度函数length()
    echo 12345| wc -L
    echo 12345| awk '{print length($0)}'
    
    大小写转换
    toupper()    转大写
    tolower()    转小写
    awk -F: '{print tolower(toupper($1))}' /etc/passwd
    
    位置函数index()
    awk '$0~"ss" {print index()$0,"ss"}' /etc/passwd
    算出ss在那一行的字符位置
    
    截取函数substr()
    awk -F: '{print substr($1,1,2)}' /etc/passwd
    把$1从第一个字符起,截取2个字符
    
    echo 123456789ss987654321 | awk '{print substr($0,index($0,"ss"),4)}'
    结果:ss98
  • 相关阅读:
    buuctf-web [强网杯 2019]随便注 1
    buuctf-crypto 引用可打印
    buuctf-crypto 变异凯撒
    buuctf-misc 文件中的秘密
    buuctf-misc LSB
    nginx 模块配置
    cloudflare CDN下nginx获取用户真实IP地址
    使用nginx后如何在web应用中获取用户ip及原理解释
    获取用户真实 ip 地址的 nginx 相关配置
    解决nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
  • 原文地址:https://www.cnblogs.com/maxgongzuo/p/6007714.html
Copyright © 2011-2022 走看看