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) 将字符串转换为大写
    蓦然回首,那人却在,灯火阑珊处。
  • 相关阅读:
    BFS visit tree
    Kth Largest Element in an Array 解答
    Merge k Sorted Lists 解答
    Median of Two Sorted Arrays 解答
    Maximal Square 解答
    Best Time to Buy and Sell Stock III 解答
    Best Time to Buy and Sell Stock II 解答
    Best Time to Buy and Sell Stock 解答
    Triangle 解答
    Unique Binary Search Trees II 解答
  • 原文地址:https://www.cnblogs.com/linux-186/p/14543878.html
Copyright © 2011-2022 走看看