이름에 두 개의 에포크 타임스탬프가 포함된 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