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

如何在Bash中更精确获取过去1小时的价格变动数据?

更精确匹配过去1小时数值的方法

嘿,针对你的需求,我整理了几个比当前脚本更精准的方案,你可以根据实际数据情况选择:

1. 匹配最接近1小时前的记录(推荐)

如果你的数据库记录不是严格按固定间隔生成的,原脚本的±120秒窗口可能会错过更贴近1小时前的数据,甚至窗口内没有数据。这种情况下,找和目标时间戳差值最小的记录会更靠谱:

首先计算1小时前的精确时间戳:

target_ts=$(($(date +%s) - 3600))

然后用awk遍历所有记录,找出时间戳最接近target_ts的数值:

closest_value=$(sort -u /home/f/dbfile | awk -v target="$target_ts" '
    BEGIN {
        min_diff = 1000000000  # 初始化一个很大的差值
        result = ""
    }
    {
        # 计算当前时间戳和目标时间的差值绝对值
        diff = ($1 > target) ? $1 - target : target - $1
        # 如果当前差值更小,更新结果
        if (diff < min_diff) {
            min_diff = diff
            result = $2
        }
    }
    END { print result }
')

这个脚本会自动帮你找到和“1小时前”时间点最接近的数值,不管这个记录是在1小时前的前后哪个方向,比固定窗口更灵活准确。

2. 严格匹配过去1小时范围内的记录

如果你需要的是“从1小时前到现在”这个时间段内的所有数值(而不是某个点),可以直接调整过滤条件,去掉固定的±120秒限制:

start_ts=$(($(date +%s) - 3600))
end_ts=$(date +%s)

# 获取过去1小时内的所有数值,你可以根据需求取最后一条、第一条或平均值
last_hour_values=$(sort -u /home/f/dbfile | awk -v start="$start_ts" -v end="$end_ts" '$1 >= start && $1 <= end {print $2}')

# 比如取这个时间段的最后一条记录
latest_in_hour=$(echo "$last_hour_values" | tail -1)
# 或者取第一条记录
earliest_in_hour=$(echo "$last_hour_values" | head -1)

3. 精准匹配刚好1小时前的记录(如果存在)

如果你的数据里刚好有和1小时前时间戳完全一致的记录,可以直接精准匹配:

target_ts=$(($(date +%s) - 3600))
exact_value=$(sort -u /home/f/dbfile | awk -v target="$target_ts" '$1 == target {print $2}')

不过这种情况比较少见,因为时间戳通常是精确到秒的,刚好命中的概率不高,所以还是第一种方法实用性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:11:10