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

Shell脚本实现:根据服务器当前时间匹配CSV时间段提取TPS值

根据服务器时间匹配CSV时间区间行的脚本实现

核心需求

从包含StartTime,EndTime,TPS的CSV文件中,找出当前服务器时间处于StartTime和EndTime区间内的行,将该行写入单独文件,并从原CSV中移除该行。

优化当前时间获取

你原来的时间获取代码可以简化为更可靠的写法:

# 获取当前时间(HH:MM格式)
TS=$(date +%H:%M)
echo "Current time = $TS"

匹配目标行的核心代码

使用awk处理CSV是最便捷的方式,我们可以把时间转换为分钟数进行数值比较(避免字符串比较的潜在问题),同时完成匹配行输出和原文件更新:

# 定义文件路径(根据实际情况修改)
CSV_FILE="tps_schedule.csv"
TARGET_FILE="current_tps.csv"
TEMP_FILE=$(mktemp)

# 将当前时间转换为分钟数(比如11:35 → 11*60+35=695)
current_minutes=$(echo "$TS" | awk -F: '{print $1*60 + $2}')

# 用awk处理CSV,分离匹配行和非匹配行
awk -v current="$current_minutes" -F, '
    # 保留表头到临时文件
    NR == 1 { print > "'"$TEMP_FILE"'" ; next }
    {
        # 转换StartTime为分钟数
        split($1, start, ":"); start_min = start[1]*60 + start[2]
        # 转换EndTime为分钟数
        split($2, end, ":"); end_min = end[1]*60 + end[2]
        # 判断当前时间是否在[StartTime, EndTime)区间内(符合你示例中的逻辑)
        if (current >= start_min && current < end_min) {
            print > "'"$TARGET_FILE"'"
        } else {
            print > "'"$TEMP_FILE"'"
        }
    }
' "$CSV_FILE"

# 备份原文件并替换为处理后的内容(防止数据丢失)
mv "$CSV_FILE" "${CSV_FILE}.bak" && mv "$TEMP_FILE" "$CSV_FILE"

关键说明

  • 时间转分钟数:把HH:MM格式的时间转换成总分钟数,比如12:00→720,11:30→690,这样数值比较更直观,不会出现字符串比较的异常。
  • 区间判断逻辑:current >= start_min && current < end_min,符合你示例中11:35匹配11:30-12:00行的规则,12:00会匹配下一行12:00-12:45。
  • 文件安全处理:先用mktemp创建临时文件存储非匹配行,再备份原文件后替换,避免脚本出错导致数据丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 17:25:25