
이봐, 내가 좀 멍청한 것 같지만 기호가 포함된 시퀀스를 활용하는 방법을 어디서도 찾을 수 없는 것 같습니다.
두 개의 날짜 및 시간 시퀀스를 실행할 수 있기를 원 20191110_2330
하지만 20191111_0200
읽는 방법을 알 수 없습니다 _
. 어떤 조언이라도 대단히 감사하겠습니다.
답변1
약간 과잉일 수도 있지만 다음 bash 함수와 GNU date(1)를 사용하여 이 작업을 수행할 수 있었습니다.
seq_dates () {
local Y1 M1 D1 d1
local r
local m=0
Y1=${1:0:4}
M1=${1:4:2}
D1=${1:6:2}
d1="${Y1}-${M1}-${D1} ${1: -4}"
until [[ $r == $2 ]]; do
r=$($date -d "$d1 + $m minutes" '+%Y%m%d_%H%M')
printf '%s\n' "$r"
((m++))
done
}
다음과 같이 호출할 수 있습니다.
seq_dates 20191110_2330 20191111_0200
입력된 시작 날짜를 GNU Date에서 사용할 수 있는 형식으로 변환한 다음, 지정된 종료 날짜와 같아질 때까지 매번 날짜에 1분을 추가하는 루프를 실행합니다.
노트: 지정된 종료 날짜가 지정된 시작 날짜보다 이전인 경우 무한 루프가 실행됩니다.
답변2
반복 날짜의 경우 필요한 모든 시간 단계에 대해 시작과 끝 및 반복을 정의하기만 하면 됩니다.
시작과 끝으로 에포크 시간을 사용하고 각 반복마다 60초 또는 원하는 단계 크기를 추가하면 됩니다. 그런 다음 필요에 따라 출력 형식을 설정합니다.
#!/bin/bash
start=$(date -d2019-11-10T23:30 +%s)
end=$(date -d2019-11-11T02:00 +%s)
ddate="$start"
while [ $ddate -le $end ] ; do
date -d@"$ddate" +%Y%m%d_%H%M
ddate=$((ddate+60))
done
날짜 문자열을 명령으로 읽을 수 있는 형식으로 변환하려면 date
다음을 사용하세요 sed
.
echo 20191110_2030 | sed 's/\(....\)\(..\)\(..\)_\(..\)\(..\)/\1-\2-\3T\4:\5/'
불행하게도 대부분의 date
버전은 입력 문자열 형식 정의를 지원하지 않습니다.