날짜 출력 형식을 다음과 같이 원합니다 ...
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 타임스탬프를 가져옵니다. 그런 다음 종료 날짜를 찾아 출력할 때까지 반복합니다. 각 반복마다 timestamp
86400초(24시간)를 추가합니다.
printf
bash
날짜 문자열은 해당 형식을 사용하여 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 끝에 월과 연도를 인쇄합니다.