ファイル名で2つのエポック時間の違いを見つける

ファイル名で2つのエポック時間の違いを見つける

名前には、2つのエポックタイムスタンプを含むSplunkバケット(ディレクトリ)が複数あります。 1488344400(2017年3月1日)と1497499200(2017年6月15日)の間に2番目のエポック時間を持つファイルを見つけるには、これらのファイル名の検索を実行する方法を見つける必要があります。ファイル名の形式は次のとおりです。

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つの数字のうち最後の数字に対して数値比較が実行されます。比較がtrueの場合、名前は標準出力に報告されます。

答え2

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

注:通常解析できません。lsしかし、ファイル名に特殊文字が含まれていないことがわかっているため、問題は発生しません。この特別なケースでは

:については、awk単に_フィールド区切り文字として定義し、言及した新起源時間の間に3番目のフィールド(「最も早い時間」に従って)があるすべての行を印刷します。

答え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

関連情報