zoukankan      html  css  js  c++  java
  • Shell awk

    1.awk流逝编辑器,支持分段,列的处理。

     

    Awk参数

    -F‘:’                         #分割字符,不加默认按空格。
    
    {print NR}                     #显示行号。
    
    ==,>,<,=>,<=,               #等于。大于,小雨,大于等于,大于小于。
    
    =                              #更改值。
    
    $NF                            #等于段。
    
    $NR                            #等于行。

    Awk语句

    1)awk –F‘:’ ‘{print $1}’ 文件名                     #分割:字符$表示第几个。      
    
    (2)awk ‘/root/’文件名                                 #匹配关键字。
    
    (3)awk –F‘:’ ‘/root/ {print $1,$3}’                 #查找/root/行的:的第一段第三段。
    
    (4)awk –F‘:’ ‘/$1==root {print $1,$3}’             #输出$1等于root的行并输出$1,$3。
    
    (5)awk –F ‘:’ ‘$3>=500’passwd                        #$3大于等于500的都列出来。
    
    (6)awk –F ‘:’ ‘$7!=“/sbin/nologin”’ passwd        #$7不等于nologin的列出来。
    
    (7)awk –F ‘:’ ‘$3==$4 && $7!=“/bin/bash”’        #$3等于$4并且$7不是/bin/bash。
    
    (8)awk –F ‘:’ ‘$NR>20 && $NF!=“/bin/bash”’      #20行内的,每一个段中,打印出不等于/bin/bash的行。
    
    (9)awk –F ‘:’ ‘$7=$3+$4’ passwd                     #相加得出$7的结果。不打印冒号。
    
    (10)awk –F ‘:’ ‘{(tot=tot+$3)}; END {print tot}’    #得出tot的值。
    
    (11)awk –F ‘:’ ‘{if ($1==“root”) print}’         #得出$1等于root参数的行。

    12)awk -v RS='' -F'-' '{print NF-1}'         #查找指定字符串“-”的次数

    2.理解语句awk –F‘:’‘{print $0}’与awk –F‘:’‘$1=1{print $0}’区别。

    1)awk –F‘:’‘{print $0}’        #显示所有行列,显示:。
    
    (2)awk –F‘:’‘$1=1{print $0}     #显示所有行列,更改值后,不显示:。

    新增拓展2

    # 默认空格符分隔 print输出。
    awk  '{print $1}'
    
    # 使用-F指定切割符,	 TAB 距离
    awk  -F ':'  '{print $1"	"$7}'
    
    # BEGIN 输出开头字符,END 输出结尾字符
    awk -F':' 'BEGIN {print "name,shell"} {print $1","$7} END {print "blue,/bin/nosh"}'
    
    # 查找":"分隔的包含root开头的字符串的行。
    awk -F':' '/^root/'
    
    # 查找已root存在的行的$7字符
    awk -F":" '/root/{print $7}' /etc/passwd
    # awk 内置变量
    ARGC:命令行参数个数
    ARGV:命令行参数排列
    ENVIRON:支持队列中系统环境变量的使用
    FILENAME:awk浏览的文件名
    FNR:浏览文件的记录数
    FS:设置输入域分隔符,等价于命令行 -F选项
    NF:浏览记录的域的个数
    NR:已读的记录数
    OFS:输出域分隔符
    ORS:输出记录分隔符
    RS:控制记录分隔符
    
    # 查看文件 文件名、行号、每行的列数、$0对应的完整内容
    awk -F":" '{print "filename:" FILENAME "	linenumber:" NR "	columns:" NF "	linecontent:"$0}' /etc/passwd
    
    # 查看文件,使用printf %s代表变量,结尾按照顺序赋值变量。
    awk -F':' '{printf("filename:%s	linenumber:%s	columns:%s	linecontent:%s
    ",FILENAME,NR,NF,$0)}' /etc/passwd
    awk中同时提供了print和printf两种打印输出的函数。
    
    print函数的参数可以是变量、数值或者字符串。字符串必须用双引号引用,参数用逗号分隔。如果没有逗号,参数就串联
    
    在一起而无法区分。这里,逗号的作用与输出文件的分隔符的作用是一样的,只是后者是空格而已。
    
    printf函数,其用法和c语言中printf基本相似,可以格式化字符串,输出复杂时,printf更加好用,代码更易懂。
    print 与 printf
    # awk 赋值变量
    
    # 查看用户个数。count++为自定义变量,后面count则是调用count变量。count默认为0 ++ 为按行加1
    awk -F":" '{count++;print $1} END{print "user count is",count}' /etc/passwd
    
    # 查看用户个数。自定义变量,指定默认为0 按行算每行+1.
    awk 'BEGIN {count=0;print "[start]user count is ",countq} {count=count+1;print $0;} END{print "[end]user 
    
    count is ",count}' /etc/passwd
    
    # 打印当前目录下占用的全部字节数,size默认定义为0,与每个$5字节相加,除,求出M,并打印
    ls -l | awk 'BEGIN {size=0;} {size=size+$5} END{print "[end]size is ",size/1024/1024,"M"}'
    # awk 条件语句
    
    格式:
    
    if (expression) {
        statement;
        statement;
        ... ...
    }
    
    if (expression) {
        statement;
    } else {
        statement2;
    }
    
    if (expression) {
        statement1;
    } else if (expression1) {
        statement2;
    } else {
        statement3;
    }
    
    
    # 当前文件内文件相加,并判断不等于178的文件就相加,起到过滤,并取出M,打印结果。
    ls -l | awk 'BEGIN {size=0;print "[start]size is",size} {if($5!=178){size=size+$5;}} END{print "[end]size is 
    
    ",size/1024/1024,"M"}'
    
    # 数组,循环,打印用户名与序号。
    awk -F":" 'BEGIN {count=0} {name[count] = $1;count++;}; END{for (i = 0;i < NR;i++) print i,name[i]}' /etc/passwd
  • 相关阅读:
    20162328蔡文琛 四则运算第一周
    实验三:实验报告
    20162328蔡文琛week09
    20162328蔡文琛week08
    20162328蔡文琛week07
    实验报告二
    20162312张家铖 10.9查找课堂测试
    20162312实验一
    # 20162312 2017-2018-3 《程序设计与数据结构》第3周学习总结
    # 20162312 2017-2018-1 《程序设计与数据结构》第1周学习总结
  • 原文地址:https://www.cnblogs.com/xiangsikai/p/8284422.html
Copyright © 2011-2022 走看看