awk脚本格式化文本实例

awk脚本格式化文本实例

场景:现有如下文本文件score.txt,我想输出score_awk.txt格式的文本。

#score.txt(name,no,math,english,computer)
tom 1 90 98 100
jerry 3 80 90 89
carl 2 99 95 88
luna 4 84 74 80
#score_awk.txt
NAME  NO MATH ENGLISH COMPUTER TOTAL
-----------------------------------
tom   1   90    98      100     288   
jerry 3   80    90      89      259   
carl  2   99    95      88      282   
luna  4   84    74      80      238   
-----------------------------------
  TOTAL: 353   357     357 
AVERAGE:88.25 89.25   89.25 

可以先分析一下最终输出的格式文本的特点:
1、第一行和第二行表头 ->这两行不需要读取score.txt中的数据,故我们放在awk的BEGIN部分直接打印出来;
2、中间主体数据 ->读取score.txt文本,放在主循环的代码段中直接输出;
3、最后三行 ->读取score.txt文本,最后两行需要通过运算得出,所以可以放在读取文件之后的代码段即END部分。

awk -f cal.awk score.txt>score_awk.txt
#!/bin/bash
BEGIN {
	math=0
	english=0
	computer=0
	printf "NAME  NO MATH ENGLISH COMPUTER TOTAL\n"
	printf "-----------------------------------\n"
}
{
	math+=$3
	english+=$4
	computer+=$5
	printf "%-5s %-3s %-5s %-7s %-7s %-6s\n",$1,$2,$3,$4,$5,$3+$4+$5
}
END{
	printf "-----------------------------------\n"
	printf "  TOTAL:%4d %5d %7d \n",math,english,computer
	printf "AVERAGE:%4.2f %5.2f %7.2f \n ", math/NR, english/NR, computer/NR
}

NR:文本的行数,在这里即为score.txt的行数;
\n:换行;
%nd:格式化输出,表示输出n个字节的空间;
%nf:表示输出n位小数的浮点型数据(float)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值