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) 将字符串转换为大写
蓦然回首,那人却在,灯火阑珊处。
原文地址:https://www.cnblogs.com/linux-186/p/14543878.html