shell编程之awk

作者: hemingkung | 来源:发表于2019-06-30 23:57 被阅读0次
    
    /***************************************************************************/
    awk的内置变量
    
    
    awk 'BEGIN{}pattern{command}END{}'
    
    总结:内置变量
    $0                    打印出行所有信息
    awk '{print $0}' /etc/passwd
    
    $1-$n                 打印行的第1到n个字段的信息
    awk 'BEGIN{FS=":"}{print $1}' /etc/passwd
    
    NF (Number Field)       处理行的字段个数
    awk '{print NF}' list
    
    NR (Number Row)         处理行的行号
    awk '{print NR}' list /etc/passwd  后面指定的文件行数累加
    
    FNR (File Number Row)   多文件处理时,每个文件单独记录行号
    awk 'print FNR' list /etc/passwd
    
    FS  (Filed Separator)   字段分割符,不指定时默认以空格或tab键做分割
    awk 'BEGIN{FS="|"}{print $2}' list
    
    RS                    行分割符,不指定时以回车换行分割
    awk 'BEGIN{FS="|";RS="---"}{print $2}' list
    
    OFS (Output Filed Separator)                  输出字段分割符
    awk 'BEGIN{RS="--";FS="|";ORS="&";OFS=":"}{print $1,$3}' list
    
    ORS  (Output Row Separator)                 输出行分隔符
    awk 'BEGIN{RS="--";FS="|";ORS="&"}{print $3}' list
    
    FILENAME              处理文件的文件名
    awk '{print FILENAME}' list
    
    ARGC                  命令行参数的个数
    awk '{print ARGC}' list
    
    ARGV                  命令行参数数组
    
    
    
    awk格式化输出之printf总结
    %s     打印字符串
    
    
    %d     打印10进制数
    
    
    %f     打印浮点数
    
    
    %x     打印16进制数
    
    
    %o     打印8进制数
    
    
    %e     打印数字的科学计数法格式
    
    
    %c     打印单个字符的ASCII码
    
    
    
    修饰符
    -    左对齐
    +    右对齐
    #    显示8进制在前面加0 显示16进制在前面加0x
    
    
    格式示例:
    
    1、以字符串格式打印/etc/passwd中的第七个字段
    awk 'BEGIN{FS=":"}{printf "%s",$7}' /etc/passwd
    
    2、以10进制格式打印/etc/passwd中的第三个字段,以":"作为分隔符
    awk 'BEGIN{FS=":"} {printf "%d\n",$3}' /etc/passwd
    
    3、以浮点数格式打印/etc/passwd中的第三个字段,以":"作为分隔符
    awk 'BEGIN{FS=":"} {printf "%f\n",$3}' /etc/passwd
    
    4、以16进制数格式打印/etc/passwd中的第三个字段,以":"作为分隔符
    awk 'BEGIN{FS=":"} {printf "%x\n",$3}' /etc/passwd
    
    5、以8进制格式打印/etc/passwd中的第三个字段,以":"作为分隔符
    awk 'BEGIN{FS=":"} {printf "%o\n",$3}' /etc/passwd
    
    6、以科学计数法格式打印/etc/passwd中的第三个字段,以":"作为分隔符
    awk 'BEGIN{FS=":"} {printf "%e\n",$3}' /etc/passwd
    
    
    修饰符示例:
    1左对齐格式
    2右对齐格式
    3打印8进制或者16进制是在前面加#
    
    
    /********************************************************************************/
    awk模式匹配用法总结:
    ①、RegExp
    ②、运算符匹配
    
    1、RegExp
    匹配/etc/passwd文件中含有root字符串的所有行
    awk 'BRGIN{FS=":"}/root/{print $0}' /etc/passwd
    
    匹配/etc/passwd文件行中以yarn开头的所有行
    awk 'BRGIN{FS=":"}/^yarn/{print $0}' /etc/passwd
    
    2、运算符匹配
    
    关系运算符匹配
    
    <        小于
    >        大于
    <=       小于等于
    >=       大于等于
    ==       等于
    !=       不等于
    ~        匹配正则表达式
    
    
    1、以:为分隔符,匹配/etc/passwd文件中第3个字段小于50的所有行信息
    awk 'BEGIN{FS=":"}$3<50{print $0}' /etc/passwd
    
    2、以:为分隔符,匹配/etc/passwd文件中第3个字段大于50的所有行信息
    awk 'BEGIN{FS=":"}$3>50{print $0}' /etc/passwd
    
    3、以:为分隔符,匹配/etc/passwd文件中第7个字段为/bin/bash的所有行信息
    awk 'BEGIN{FS=":"}$7=="/bin/bash"{print $0}' /etc/passwd
    
    4、以:为分隔符,匹配/etc/passwd文件中第7个字段不为/bin/bash的所有行信息
    awk 'BEGIN{FS=":"}$7!="/bin/bash" /etc/passwd
    
    5、以:为分隔符,匹配/etc/passwd文件中第3个字段包含3个以上数字的所有行信息
    awk 'BEGIN{FS=":"}$3~/[0-9]{3,}/{print $0}' /etc/passwd
    
    布尔运算符匹配
    ||     或
    &&     与
    !     非
    
    1:以:分隔符,匹配/etc/passwd文件中包含hdfs或者yarn的所有行信息
    awk 'BEGIN{FS=":"}$1=="hdfs"||$1=="yarn"{print $0}' /etc/passwd
    
    2:以:分隔符,匹配/etc/passwd文件中第三个字段小于50并且第四个字段大于50的所有行信息
    awk 'BEGIN{FS=":"}$3<50 && $4>50{print $0}' /etc/passwd
    
    awk的基本运算
    
    +           加
    -           减
    *           乘
    /           除
    %           取模
    ^或**       乘方
    ++x         在返回x变量之前,x变量加1
    x++         在返回x变量之后,x变量加1
    --x         在返回x变量之前,x变量减1
    x--         在返回x变量之后,x变量减1
    
    1 使用awk计算/etc/services中空白的行数量
    
    
    2 计算学生课程分数的平均值 学生课程文件如下
    
    
    3 使用awk输出/etc/passwd文件的行数 分两种方式进行显示行数 
    
    
    

    相关文章

      网友评论

        本文标题:shell编程之awk

        本文链接:https://www.haomeiwen.com/subject/bsgicctx.html