기간(분)

기간(분)

나는 2010년 1월 1일부터 2010년 1월 2일까지 일련의 날짜를 생성하려고 합니다. 분의 간격은 다음과 같습니다.

2010  1  1  00  00  00
2010  1  1  00  20  00
2010  1  1  00  30  00
2010  1  1  00  40  00
2010  1  1  01  00  00
2010  1  1  01  20  00
2010  1  1  01  30  00
2010  1  1  01  40  00

...
2010  2  1  00  00  00

그러니까 종료일까지 매시간 00분, 20분, 30분, 40분씩. 문제에 대한 도움을 찾았습니다.https://stackoverflow.com/questions/15621409/print-dates-in-date-range-linux 하지만 "-"를 공백과 고르지 않은 단계로 바꾸는 것은 물론, 분을 추가할 수도 없습니다. 이것은 지금까지 내 코드이며 작동하지 않습니다.

startdate=2010-01-01-00-00-00
enddate=2010-02-01-00-00-00

curr="$startdate"
while true; do
    echo "$curr"
    [ "$curr" \< "$enddate" ] || break
    curr=$( date +%Y-%m-%d-%H-%M-%S --date "$curr +10 minutes" )
done

이러한 간격(사이에 공백 포함)을 사용하여 위의 출력을 어떻게 생성할 수 있습니까?

답변1

이것이 내가 하는 방법이다:

$ date -d '2010-01-01 00:00:00' +%s
1262300400
$ date -d '2010-02-01 00:00:00' +%s
1264978800

$ for timestamp in {1262300400..1264978800..600}; do date -d @"$timestamp" '+%Y %m %d %H %M %S'; done | grep -Ev '[15]0 00$'

무엇 grep -Ev '[15]0 00$'인가요:

  • grep자체적으로 인수로 설명되는 일련의 조건과 일치하는 행을 선택합니다.
  • -v: 매개변수와 일치하지 않는 행을 선택합니다.
  • -E: 우리가 일치시키려고 시도할 패턴이 "확장 정규식"이라고 선언합니다(실제로 여기서는 필요하지 않습니다. 제 실수입니다).
  • [15]0 00$: ""1 또는 5"로 끝나는 줄 선택, "0", "공백", "이중 0"을 선택하는 정규식입니다. 이는 "10" 및 "50" 줄과 일치합니다. 이 줄은 다음으로 인해 제거되었습니다. 위의 -v설명.

관련 정보