파일 이름에서 두 에포크 시간의 차이 찾기

파일 이름에서 두 에포크 시간의 차이 찾기

이름에 두 개의 에포크 타임스탬프가 포함된 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]*)이름에 있는 두 숫자 중 마지막 숫자에 대해 숫자 비교가 수행됩니다. 비교가 true이면 이름이 표준 출력에 보고됩니다.

답변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

관련 정보