zoukankan      html  css  js  c++  java
  • shell编程系列17--文本处理三剑客之awk动作中的表达式用法

    shell编程系列17--文本处理三剑客之awk动作中的表达式用法
    
    
    awk动作表达式中的算数运算符
    
    awk动作中的表达式用法总结:
    
        运算符        含义
        +-*/%^或**        乘方
        ++x        在返回x变量之前,x变量加1
        x++        在返回x变量之后,x变量加1
        --x        在返回x变量之前,x变量减1
        x--        在返回x变量之后,x变量减1
    
        1、使用awk计算/etc/services中的空白行数量
            awk 'BEGIN{sum=0}/^$/{++sum}END{print sum}' /etc/services
        2、计算学生课程分数平均值,学生课程文件内容如下:
            Allen    80    90    96    98
            Mike    93    98    92    91
            Zhang    78    76    87    92
            Jerry    86    89    68    92
            Han    85    95    75    90
            Li    78    88    98    100
    
            # 代码如下:
            [root@localhost shell]# awk 'BEGIN{printf "%-20s%-20s%-20s%-20s%-20s%-20s
    ","Name","Chinese","English","Math","Physical","Average"}{sum=$2+$3+$4+$5;avg=sum/4}{printf "%-20s%-20d%-20d%-20d%-20d%-0.2f
    ",$1,$2,$3,$4,$5,avg}' student.txt 
            Name                Chinese             English             Math                Physical            Average             
            Allen               80                  90                  96                  98                  91.00
            Mike                93                  98                  92                  91                  93.50
            Zhang               78                  76                  87                  92                  83.25
            Jerry               86                  89                  68                  92                  83.75
            Han                 85                  95                  75                  90                  86.25
            Li                  78                  88                  98                  100                 91.00
    
    
    [root@localhost shell]# awk 'BEGIN{num1=20;num2+=num1;print num1,num2}'
    20 20
    [root@localhost shell]# awk 'BEGIN{num1=20;num2=30;print num1+num2}'
    50
    [root@localhost shell]# awk 'BEGIN{num1=20;num2=30;print num1-num2}'
    -10
    [root@localhost shell]# awk 'BEGIN{num1=20;num2=30;print num1*num2}'
    600
    [root@localhost shell]# awk 'BEGIN{num1=20;num2=30;print num1/num2}'
    0.666667
    # 保留小数后两位
    [root@localhost shell]# awk 'BEGIN{num1=20;num2=30;printf "%0.2f
    ",num1/num2}'
    0.67
    
    [root@localhost shell]# awk 'BEGIN{num1=20;num2=3;printf "%0.2f
    ",num1**num2}'
    8000.00
    # 打印
    [root@localhost shell]# awk 'BEGIN{num1=20;num2=3;printf "%0.2f
    ",num1^num2}'
    8000.00
    
    # 
    [root@localhost shell]# awk 'BEGIN{x=20;y=x++;print x,y}'
    21 20
    [root@localhost shell]# awk 'BEGIN{x=20;y=++x;print x,y}'
    21 21
    [root@localhost shell]# awk 'BEGIN{x=20;y=--x;print x,y}'
    19 19
    [root@localhost shell]# awk 'BEGIN{x=20;y=x--;print x,y}'
    19 20
    
    
    # 输出平均值
    [root@localhost shell]# cat student.txt 
    Allen    80    90    96    98
    Mike    93    98    92    91
    Zhang    78    76    87    92
    Jerry    86    89    68    92
    Han    85    95    75    90
    Li    78    88    98    100
    [root@localhost shell]# awk '{total=$2+$3+$4+$5;AVG=total/4}{printf "%-8s%-5d%-5d%-5d%-8d%0.2f
    ",$1,$2,$3,$4,$5,AVG}' student.txt 
    Allen   80   90   96   98      91.00
    Mike    93   98   92   91      93.50
    Zhang   78   76   87   92      83.25
    Jerry   86   89   68   92      83.75
    Han     85   95   75   90      86.25
    Li      78   88   98   100     91.00
    # 加上标题并格式化输出
    [root@localhost shell]# awk 'BEGIN{printf "%-10s%-10s%-10s%-10s%-10s%-10s
    ","name","Yuwen","math","English","Pysical","Average"}{total=$2+$3+$4+$5;AVG=total/4}{printf "%-10s%-10d%-10d%-10d%-10d%-10.2f
    ",$1,$2,$3,$4,$5,AVG}' student.txt
    name      Yuwen     math      English   Pysical   Average   
    Allen     80        90        96        98        91.00     
    Mike      93        98        92        91        93.50     
    Zhang     78        76        87        92        83.25     
    Jerry     86        89        68        92        83.75     
    Han       85        95        75        90        86.25     
    Li        78        88        98        100       91.00 
  • 相关阅读:
    Door man
    Borg Maze
    Agri-Net
    Highways
    Truck History
    Arctic Network
    QS Network
    用贝塞尔曲线实现水波效果
    在一个Label上设置多种颜色字体
    用UIImageView作出动画效果
  • 原文地址:https://www.cnblogs.com/reblue520/p/10984785.html
Copyright © 2011-2022 走看看