You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:27:36