두 날짜 사이에 예상되는 형식으로 날짜 출력

두 날짜 사이에 예상되는 형식으로 날짜 출력

날짜 출력 형식을 다음과 같이 원합니다 ...

01/01/2020
02/01/2020
03/01/2020
04/01/2020
05/01/2020
06/01/2020
07/01/2020
08/01/2020
09/01/2020
10/01/2020
11/01/2020
12/01/2020
13/01/2020
14/01/2020
15/01/2020
16/01/2020
17/01/2020
18/01/2020
19/01/2020
20/01/2020
21/01/2020
22/01/2020
23/01/2020
24/01/2020
25/01/2020
26/01/2020
27/01/2020
28/01/2020
29/01/2020
30/01/2020

현재 제가 사용하고 있는...

cal 01 2020 | grep -v "[A-Z][a-z]"| tr ' ' '\n' | sort -n | awk '$1~/[0-9]/ { printf "%02s/%02s/%4s\n",$1,"01","2020"}'

01/01/2017위의 형식을 원합니다 31/12/2019. 나는 무엇을 해야 합니까?

답변1

#!/bin/bash

timestamp=$( date -d '2017-01-01 12:00' +%s )

while [ "$thedate" != '31/12/2019' ]; do
        printf -v thedate '%(%d/%m/%Y)T' "$timestamp"
        timestamp=$(( timestamp + 86400 ))

        printf '%s\n' "$thedate"
done

위 스크립트는 먼저 GNU를 사용하여 date시작 날짜 정오( 1483268400)의 UNIX 타임스탬프를 가져옵니다. 그런 다음 종료 날짜를 찾아 출력할 때까지 반복합니다. 각 반복마다 timestamp86400초(24시간)를 추가합니다.

printfbash날짜 문자열은 해당 형식을 사용하여 UNIX 타임스탬프에서 날짜-시간 문자열을 형식화할 수 있는 내장 유틸리티를 사용하여 생성됩니다 (이 경우 버전 4.3 이상이 %(...)T필요함 ). 또한 를 사용하여 변수 bash에 직접 인쇄합니다 . thedate-v

GNU가 없는 일부 시스템에서는 명령줄 인수의 대체 형식을 사용하는 기본 유틸리티를 통해 시작 날짜의 타임스탬프를 얻을 date수 있습니다 . date예를 들어, OpenBSD에서는 다음을 통해 이루어집니다.

date -j +%s 201701011200

man date특정 Unix를 확인하세요 .

awk일부 확장도 사용할 수 있습니다.

awk 'BEGIN { print mktime("2017 01 01 12 00 00") }'

awk그러나 이것이 (GNU awk정도 ) 있다면 mawk다음에서 모든 것을 수행하는 것이 좋습니다 awk.

awk '
BEGIN {
        timestamp = mktime("2017 01 01 12 00 00")

        while (thedate != "31/12/2019") {
                thedate = strftime("%d/%m/%Y", timestamp)
                timestamp += 86400

                print thedate
        }
}'

답변2

현재 연도와 다음 달에 대한 첫 번째 반복을 포함하는 중첩 for 루프를 추가해야 합니다. 각 달에 대해 이미 수행한 작업을 수행하여 awk 끝에 월과 연도를 인쇄합니다.

관련 정보