查找文件名中两个纪元时间之间的差异

查找文件名中两个纪元时间之间的差异

我有一堆 Splunk 存储桶(目录),其名称中包含两个纪元时间戳。我需要找到一种方法对这些文件名执行查找,以找到第二个纪元时间在 1488344400(2017 年 3 月 1 日)和 1497499200(2017 年 6 月 15 日)之间的任何文件。文件名的格式如下:

db_1274129994_1273525194_0 (db_latesttime_earliesttime_idnum)

“最早时间”是决定因素,因为最晚时间可能会超出日期。

答案1

使用bash

for d in db_*_*_*; do
    if [[ "$d" =~ db_([0-9]*)_([0-9]*) ]]; then
        if [[ "${BASH_REMATCH[2]}" -ge 1488344400 ]] &&
           [[ "${BASH_REMATCH[2]}" -le 1497499200 ]]; then
            printf 'Found "%s"\n' "$d"
        fi
    fi
done

这会迭代db_*_*_*当前目录中的所有名称。如果任何名称与正则表达式匹配db_([0-9]*)_([0-9]*),则对名称中找到的两个数字中的最后一个进行数字比较。如果比较结果为真,则该名称将在标准输出中报告。

答案2

ls /path/to/your/buckets | awk -F_ '$3 >= 1488344400 && $3 <= 1497499200'

注:一般情况下,不能解析ls,但由于我们知道我们的文件名不会包含特殊字符,所以我们不应该遇到麻烦在这种特殊情况下

至于awk: 我们简单地定义_为字段分隔符并打印第三个字段(根据您的“最早时间”)位于您提到的纪元时间之间的所有行。

答案3

巴什

for f in db_[0-9]*_[0-9]*; do 
    e_time="${f:14:10}"    # extracting 'earliest time'
    if [ $e_time -ge 1488344400 ] && [ $e_time -le 1497499200 ]; then 
        echo "$f"
    fi
done

相关内容