_를 포함하는 일련의 숫자를 만듭니다.

_를 포함하는 일련의 숫자를 만듭니다.

이봐, 내가 좀 멍청한 것 같지만 기호가 포함된 시퀀스를 활용하는 방법을 어디서도 찾을 수 없는 것 같습니다.

두 개의 날짜 및 시간 시퀀스를 실행할 수 있기를 원 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버전은 입력 문자열 형식 정의를 지원하지 않습니다.

관련 정보