zoukankan      html  css  js  c++  java
  • AWK-文本处理测试实例记录

    我们可以将复杂的 awk 语句写入脚本文件 cal.awk,然后通过 -f 选项指定从脚本文件执行。

    • 在 BEGIN 阶段,我们初始化了相关变量,并打印了表头的格式
    • 在 body 阶段,我们读取每一行数据,计算该学科和该同学的总成绩
    • 在 END 阶段,我们先打印了表尾的格式,并打印总成绩,以及计算了平均值

    #############################################################

    [root@localhost ~]# cat cal.awk 
    #!/bin/awk -f

    BEGIN {
    math = 0
    english = 0
    computer = 0
    printf "NAME NO. MATH ENGLISH COMPUTER TOTAL "
    printf "----------------------------------------------------- "
    }

    {
    math+=$3
    english+=$4
    computer+=$5
    printf "%-6s %-6s %4d %8d %8d %8d ", $1,$2,$3,$4,$5,$3+$4+$5
    }

    END {
    printf "--------------------------------------------------- "
    printf " TOTAL:%10d %8d %8d ", math,english,computer
    printf "AVERAGE:%10.2f %8.2f %8.2f ",math/NR,english/NR,computer/NR

    }

    ###########################################################

    [root@localhost ~]# cat  score.txt
    Marry 2143 78 84 77
    Jack 2321 66 78 45
    Tom 2122 48 77 71
    Mike 2537 87 97 95
    Bob 2415 40 57 62

    #############################################################


    [root@localhost ~]# awk -f cal.awk score.txt
    NAME NO. MATH ENGLISH COMPUTER TOTAL
    -----------------------------------------------------
    Marry 2143 78 84 77 239
    Jack 2321 66 78 45 189
    Tom 2122 48 77 71 196
    Mike 2537 87 97 95 279
    Bob 2415 40 57 62 159
    ---------------------------------------------------
    TOTAL: 319 393 350
    AVERAGE: 63.80 78.60 70.00

    ########################################################

    if 语句

    复杂的条件判断,可以使用 awk 的 if 语句,awk 的强大正因为它是个脚本解释器,拥有一般脚本语言的编程能力,下边示例通过稍微复杂的条件进行拆分文件

     #######################################################

    通过上述的示例,我们学习到了 awk 的工作原理,下边我们来总结下几个概念和常用的知识点。

    内置变量

    1. 每一行内容记录,叫做记录,英文名称 Record

    2. 每行中通过分隔符隔开的每一列,叫做字段,英文名称 Field

    明确这几个概念后,我们来总结几个重要的内置变量:

    • NR:表示当前的行数;
    • NF:表示当前的列数;
    • RS:行分隔符,默认是换行;
    • FS:列分隔符,默认是空格和制表符;
    • OFS:输出列分隔符,用于打印时分割字段,默认为空格
    • ORS:输出行分隔符,用于打印时分割记录,默认为换行符

    awk 提供 printf 函数进行格式化输出功能,具体的使用方式和 C 语法基本一致。

    基本用法

     printf " TOTAL:%10d %8d %8d ", math,english,computer

    常用的格式化方式:

    • %d 十进制有符号整数
    • %u 十进制无符号整数
    • %f 浮点数
    • %s 字符串
    • %c 单个字符
    • %e 指数形式的浮点数
    • %x %X 无符号以十六进制表示的整数
    • %0 无符号以八进制表示的整数
    • %g 自动选择合适的表示法
    •  换行符
    •  Tab符

    常用函数

    awk 内置了大量的有用函数功能,也支持自定义函数,允许你编写自己的函数来扩展内置函数。

    这里只简单罗列一些比较常用的字符串函数:

    • index(s, t) 返回子串 t 在 s 中的位置
    • length(s) 返回字符串 s 的长度
    • split(s, a, sep) 分割字符串,并将分割后的各字段存放在数组 a 中
    • substr(s, p, n) 根据参数,返回子串
    • tolower(s) 将字符串转换为小写
    • toupper(s) 将字符串转换为大写
    蓦然回首,那人却在,灯火阑珊处。
  • 相关阅读:
    Net 下安装、调试的常见问题与错误
    解决在网页框架中,页面的样式表失效的方法
    C#.NET Show Text Info
    C#.NET 部署应用程序之ClickOnce
    VS2005 数据库间转移数据(SSIS)
    C#.NET ClickOnce
    SQL2005 还原备份数据
    C#.NET TreeView.cs
    C#.NET SetComboBox Class
    C#.NET GetLocalMachineInfo.cs
  • 原文地址:https://www.cnblogs.com/linux-186/p/14543878.html
Copyright © 2011-2022 走看看