如何用awk为多页输出添加页眉、页码及页脚(每页72条记录)
这问题挺常见的,用awk完全能搞定,核心就是跟踪当前页的记录数和页码,在合适的时机触发页眉、页码和页脚的输出。我给你写个完整的示例,一步步拆解清楚:
核心思路
- 用两个变量跟踪状态:
page记录当前页码,line记录当前页已输出的记录数 - 每页开头(
line == 0时)先输出页眉和当前页码 - 每处理一条记录,
line加1;当line达到72时,输出页脚,重置line并递增页码 - 最后在
END块处理最后一页(如果记录数不足72条,也要输出页脚)
完整awk脚本示例
BEGIN { page = 1 # 初始化页码为1 line = 0 # 当前页记录数初始为0 header = "=== 员工信息报表 ===" # 自定义页眉内容 footer = "===================" # 自定义页脚内容 page_size = 72 # 每页容纳的记录数 } # 每次处理记录前,检查是否需要输出新页面的页眉和页码 line == 0 { print header print "第", page, "页" print "" # 空行分隔页眉和内容 } # 处理并打印当前记录 { print $0 line++ } # 当当前页记录数达到上限时,输出页脚并重置状态 line == page_size { print "" # 空行分隔内容和页脚 print footer print "\n" # 分页空行 line = 0 page++ } # 处理最后一页(如果记录数不足一页的情况) END { if (line > 0) { print "" print footer } }
脚本解释
- BEGIN块:初始化所有需要的变量,包括页码、当前页记录数、自定义的页眉页脚内容,还有每页的记录上限(这里设为72)
- line == 0:当当前页还没输出任何记录时,先打印页眉和页码,确保每页开头都有头部信息
- 主处理块:打印当前记录,然后递增当前页的记录数
- line == page_size:当当前页满72条记录时,打印页脚,重置记录数为0,页码加1,准备下一页
- END块:如果最后一页的记录数大于0(说明没触发过满页的页脚输出),就补打最后一页的页脚
测试方法
你可以用seq 1 200生成200条测试数据,运行脚本看看效果:
seq 1 200 | awk -f page_report.awk
这样会输出3页内容:前两页各72条,最后一页56条,每页都有完整的页眉、页码和页脚。
内容的提问来源于stack exchange,提问作者kalpesh
相关产品推荐
相关产品推荐

