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

如何修改AWK命令为每行添加递增日期?

问题原因

你的原命令中,-v date="$(date +%d-%m-%Y --date="$NR day")" 是在awk启动前由Shell执行计算的,此时awk内置变量NR还未被初始化,Shell中的$NR实际是Shell自身的变量(通常为空或0),导致date变量被设置为固定值,所以所有行输出的日期完全相同。

修复后的AWK命令

要实现每行日期依次递增,需要在awk处理每一行时,动态计算对应偏移天数的日期,以下是两种可行方案:

方案一:通过管道动态获取日期

awk '{
    cmd = "date +%d-%m-%Y --date=\"" NR " day\""
    cmd | getline date
    close(cmd)
    print $0, date
}' File_1

说明:

  • 对每一行,利用当前行号NR构建日期计算命令(第一行NR=1对应1天后的日期,第二行NR=2对应2天后,以此类推)
  • 通过cmd | getline date执行命令并将结果读取到date变量中
  • 调用close(cmd)避免因频繁创建管道导致资源泄漏

方案二:基于临时文件传递日期结果

如果对管道使用有顾虑,也可以通过临时文件中转日期结果:

awk '{
    system("date +%d-%m-%Y --date=\"" NR " day\" > /tmp/awk_date.tmp")
    getline date < "/tmp/awk_date.tmp"
    close("/tmp/awk_date.tmp")
    print $0, date
}' File_1

自定义起始日期

如果希望从今天开始递增(而非明天),只需将NR改为NR-1即可:

awk '{
    cmd = "date +%d-%m-%Y --date=\"" (NR-1) " day\""
    cmd | getline date
    close(cmd)
    print $0, date
}' File_1

执行后第一行输出今天的日期,第二行明天,以此类推。

内容的提问来源于stack exchange,提问作者Tedee12345

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 09:56:00