매월 주 수를 결정하는 방법


10

Linux CLI에서 매월 주 수를 얻는 방법이 있습니까? 어쩌면 간단한 하나의 date명령으로 이것을 얻는 다른 방법이 있습니까? 1 ~ 7 일이 첫 번째 주이고 8 ~ 14 일이 두 번째 주 등이 있다고 가정 해 봅시다.


월의 주를 어떻게 정의합니까? 일수를 7로 나누고 내림 했습니까? 일요일 / 월요일 / 지난 날짜 수
mgorven

첫째 주 1 일부터 7 일, 둘째 주 7 ~ 14 일, 14 ~ 21 일 3 번째, 4 주째 달의 끝에서 21 일까지를 말하겠습니다. 나는 날짜 nad가있는 간단한 bash 스크립트가 이것에 대한 좋은 해결책이지만 스크립트를 수행하지 않고 하나의 명령으로 죽을 수 있는지 궁금합니다.
B14D3

@ B14D3 당신의 "달의 주"정의는 매우 조잡합니다. 구체적으로 이것을 사용하고 있습니까?
voretaq7

1
나는 데이트를 위해 사람을 읽지 않았고 그 생각이 떠 올랐습니다 (때로는 너무 바보 같은 생각을했습니다). 더 나은 정의는 무엇입니까?
B14D3

답변:


21

date명령은 내부적으로 수행 할 수 없으므로 외부 산술이 필요합니다.

echo $((($(date +%-d)-1)/7+1))

편집 : %와 d 사이에 빼기 부호가 추가되었습니다.


잘 작동하지만이 산술이 정수를 반환하는 이유를 이해하지 못합니까?
B14D3

2
Bash는 정수 산술 만 수행합니다.
mgorven

와우는 몰랐다. Thx : D
B14D3

4
맞습니다. 29 일 이상은 매월 다섯 번째 주에 있습니다.
mgorven

5
주석을 더 멋지게 보이도록 형식을 지정하는 방법을 모르겠습니다. 어쨌든 구현하는 것이 좋습니다. 그러나 날짜가 08 또는 09이면 다음과 같은 오류가 발생합니다. -bash : (09 : 기본 값이 너무 큽니다 (오류 토큰은 "09"). 숫자 값이 0으로 시작하면 C 언어에서는 8 진수로 해석되므로 08 09는 유효하지 않습니다. 해결책은 % d에서 % e로 변경하고 % e는 선행 0을 생략합니다. echo $ ((($ (date + % e) -1) / 7 + 1))
Shâu Shắc

2

이것을 사용할 수 있습니다 :

월요일 첫 주

WEEKNUMBER=$(( 1 + $(date +%V) - $(date -d "$(date -d "-$(($(date +%d)-1)) days")" +%V) ))

일요일 전나무 주 daty

WEEKNUMBER=$(( 1 + $(date +%U) - $(date -d "$(date -d "-$(($(date +%d)-1)) days")" +%U) ))

1

이 시도:

d=`date +%d` ; m=`date +%m` ; y=`date +%Y` ; cal $m $y | sed -n "3,$ p" | sed -n "/$d/{=;q;}"

나를 위해 간단하게 보이지 않습니다 : D 그리고 오늘 그것은 5를 제공합니다
B14D3

1

Victor Sanchez의 솔루션 단순화 :

expr 1 + $(date +%V) - $(date +%V -d $(date +%Y-%m-01))

일요일에 주를 시작하려면 % V를 % U로 바꾸십시오.

btw : 후자는 0이 앞에 오는 숫자를 좋아하지 않기 때문에 $ ((...)) 대신 expr을 사용해야했습니다.


0

퀘스트에서 외부 도구를 수락하면 dateutils를 시도하십시오 . 그것은 한달 안에 발생한다는 개념을 가지고 있습니다. 즉, 2012 년 4 월 27 일은 2012 년 4 월 4 번째 금요일이며, 이는 주 정의와 일치합니다. 그 번호를 사용하려면 다음을 사용하십시오.

dconv 2012-04-27 -f %c
=>
  04

%c(count)는 해당 월 내 발생에 대한 형식 지정자입니다. 아니면 더 시원하게

dconv today -f '%cth %a in %b %Y'
=>
  1st Wed in Sep 2012
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.