如何实现文本文件按日更新行记录 支持awk/sed等方案及cron调度
按日更新数值记录的实现方案
核心实现逻辑
直接用awk单行命令即可满足需求,无需复杂的条件分支判断,核心思路:
- 遍历现有记录文件,仅保留非当日的所有历史记录
- 跳过原文件中当日的旧记录,末尾追加当日最新记录
- 最终输出直接覆盖原文件,自动完成「当日覆盖、历史保留」的要求
可直接用于cron调度的完整脚本
假设你提前定义好以下变量:
RECORD_FILE:存储记录的目标文件绝对路径NEW_VALUE:本次要写入的最新数值CUR_DATE:当日日期,格式统一为YYYY-MM-DD
你可以直接使用以下命令:
#!/bin/bash RECORD_FILE="/your/absolute/path/to/daily_records.csv" NEW_VALUE="你的最新数值" CUR_DATE=$(date +%Y-%m-%d) # 核心处理逻辑,自动处理文件不存在、当日记录覆盖、历史记录保留逻辑 awk -F ',' -v cur_date="$CUR_DATE" -v new_val="$NEW_VALUE" ' BEGIN {OFS = ", "} $1 != cur_date {print $0} END {print cur_date, new_val} ' "$RECORD_FILE" > "$RECORD_FILE.tmp" && mv "$RECORD_FILE.tmp" "$RECORD_FILE"
逻辑验证(匹配你的预期输出示例)
- 第1天上午10点执行,文件为空,最终写入:
2021-08-17, 5.20 - 第1天晚上11点执行,原文件中当天记录被过滤,新增最新值:
2021-08-17, 12.10 - 第2天上午10点执行,前一天的记录保留,新增当天记录:
2021-08-17, 12.10 2021-08-18, 4.90
- 第2天晚上11点执行,仅覆盖当天记录,最终:
2021-08-17, 12.10 2021-08-18, 13.10
注意事项
- cron调度时所有文件路径必须写绝对路径,避免cron工作目录异常导致找不到文件
- 若数值包含空格、特殊符号,提前用引号包裹
NEW_VALUE变量即可正常处理
内容的提问来源于stack exchange,提问作者maxillis
相关产品推荐
相关产品推荐

