• awk的涂鸦


    awk太牛了,博大精深,学不透,学了不用,又忘。

    所以花了一天,自己总结了基础,以后就当字典查(容易忘)。有不对的地方,忘大家指出。

    [ganzl@cmdb ~]$ more /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin

    概念:

    (字段,记录,就是行跟列的意思啦,我自己取的):

    字段:上面/etc/passwd内有7个字段。以":"分割,$1就是root。$0,$n:当前记录,当前记录的第N个字段
    记录:有两行记录

    这4个概念比较重要:
    NF:字段数量
    NR:记录行数
    $NF:当前行最后一个字段的内容
    $NR:当前记录的第NR个内容
    例子:

    awk '{FS=":"}NR==7||NF==8{print NF,$NF,NR,$NR}' /etc/passwd  
    awk -F: 'NR==2||NF==8{print NF,$NF,NR,$NR}' /etc/passwd

    FS:字段分割符号,默认是空格
    RS:记录分割符号,默认是空格

    例子:

    #!/bin/sh
    exec <host.list
    i=1
    while read line
    do
            if [ $i -eq 4 ];then
                    echo -n "`echo $line|awk '{print $1}'`">>tmp.host
            else
                    echo -n "`echo $line|awk '{print $1}'`,">>tmp.host
            fi
            ((i++))
    done
    
    
    
    df
    df
    df
    df
    dddddddddddddddddddddddddddddddd
    3.txt
    awk 'BEGIN{FS="
    ";RS=""}{print $1,$2,$3}' 3.txt  #不在同一行--(变成)-->同一行,同时空白记录--(变成)-->""

    ORS:记录输出分隔符
    OFS:字段输出分隔符
    例子:

    awk 'BEGIN{FS="
    ";RS="";OFS="###";ORS="???"}{print $1,$2,$3}' 3.txt

    运算符


    赋值运算符:
    = += -= *= /= %= ^= **= 赋值语句

    逻辑运算符:
    ||逻辑或 &&逻辑与

    正则运算符:
    ~ !~ 匹配正则表达式和不关系运算符

    关系运算符:< <= > >= != == 

    算术运符:
    + - 加,减
    * / & 乘,除与求余
    + - ! 一元加,减和逻辑非
    ^ *** 求幂
    ++ -- 增加或减少,作为前缀

    三目运算符:? 

    例子:
    awk 'BEGIN{a=5;a+=4;print a}' 
    awk 'BEGIN{a=1;b=2;print(a>2||b<9)}' 
    echo|awk 'BEGIN{a="aaa1000dbbb"}a~/abc/{print "ok"}'
    awk 'BEGIN{a=11;if(a>9){print "ok"}}' 
    awk 'BEGIN{a=1;print a++,++a}'
    awk 'BEGIN{a="b";print a=="c"?"yes":"no"}'

    awk的正则

    ^ :行首定位符 /^root/ 匹配所有以 root 开头的行
    $ :行尾定位符 /root$/ 匹配所有以 root 结尾的行
    . :匹配任意单个字符 /r..t/
    * :匹配 0个或多前导字符 (包括回车 ) /a*ool/ /a*ool/ 匹配0个或多a之后紧跟着ool的行,比如 ool ,aaaaool aaaaool 等
    + :匹配 1个或多前导字符 /a+b/ 匹配 1个或多个 a加 b的行,比如ab,aab 等
    ? :匹配 0个或 1个前导字符 /a?b/ 匹配 b或 ab 的行
    [] :匹配指定字符组内的任意一个字符 /^[abc] 匹配以字母 a或 b或 c开头的行 开头的行
    [^] :匹配不在指定字符组内任意一个字符 /^[^abc]/ 匹配不以字母 a或 b或 c开头的行
    () :子表达式组合 /(rool)+/ 表示一个或多rool组合,当有一些 组合,当有一些 字符需要组合时,使用括号起来
    | :或者的意思 /(root)|B/ 匹配 root 或者 B的行
    :转义字符 /a /// 匹配 a//
    ~,!~:  匹配,不匹配的条 件语句 $1~/root/ 匹配第一个字段包含符root的所有 记
    x{m} :x重复 m次 /(root){3}/ 注意这个括号
    x{m,} :x重复至少 m次 /(root){3,}/
    X{m,n} :x重复至少 m次,但不超过 n次

    例子:
    awk '/tcpdump/{print $0,NR}' /etc/passwd
    ifconfig eth2|awk -F'[" ":]+' 'NR==2{print $4,$6}'|awk '{print $1}'
    awk -F: '$1=="root"{print $0}' /etc/passwd
    
    
    netstat -nal| awk '/^tcp/{s[$NF]++}END{for(i in s)print i,s[i]}'
    统计web服务器访问IP:
    awk '{count[$1]++}END{for (ip in count){print ip,count[ip]}}' /var/log/httpd/access_log             
  • 相关阅读:
    NGINX之——配置HTTPS加密反向代理訪问–自签CA
    AVPlayer的使用,带缓冲
    优化数据页面(15)——表题应当准确精练
    FFmpeg基础库编程开发学习笔记——音频常见格式及字幕格式
    【版本号公布】Jeecg-P3 1.0 公布,J2EE微服务框架(插件开发)
    猫猫学iOS之UILabel设置圆角不成功所做调控更改
    linux strace-跟踪进程的系统调用或是信号产生情况,lstrace-跟踪己丑年调用库函数情况,进程跟踪调试命令
    text
    sql server 2008 开启1433端口,开启远程连接
    openStack kvm 虚拟机CPU颗粒化控制
  • 原文地址:https://www.cnblogs.com/shoug/p/5168954.html
Copyright © 2020-2023  润新知