O comando date
não pode fazer isso internamente, então você precisa de alguma aritmética externa.
echo $((($(date +%-d)-1)/7+1))
Editar: adicionado um sinal de menos entre o% e o d
No Linux CLI, existe uma maneira de obter o número da semana do mês? Talvez haja outra maneira de obter isso com um simples comando (como date
)? Digamos que o dia 1 a 7 seja a primeira semana, o dia 8 a 14 seja a segunda semana e assim por diante.
Você pode usar isto:
Segunda-feira, primeiro dia da semana
WEEKNUMBER=$(( 1 + $(date +%V) - $(date -d "$(date -d "-$(($(date +%d)-1)) days")" +%V) ))
Data de semana do Sunday Firs
WEEKNUMBER=$(( 1 + $(date +%U) - $(date -d "$(date -d "-$(($(date +%d)-1)) days")" +%U) ))
Tente isto:
d='date +%d' ; m='date +%m' ; y='date +%Y' ; cal $m $y | sed -n "3,$ p" | sed -n "/$d/{=;q;}"
Se você aceitar ferramentas externas em sua missão, tente dateutils . Ele tem a noção de datas de ocorrência dentro de um mês, ou seja, 27 de abril de 2012 é a quarta sexta-feira em abril de 2012, que coincide apenas com a sua definição de semana. Para obter esse número, use:
dconv 2012-04-27 -f %c
=>
04
%c
(count) é o especificador de formato da ocorrência dentro do mês. Ou para ser ainda mais legal tente
dconv today -f '%cth %a in %b %Y'
=>
1st Wed in Sep 2012
simplificando a solução de Victor Sanchez:
expr 1 + $(date +%V) - $(date +%V -d $(date +%Y-%m-01))
substitua% V por% U se você quiser semanas a partir de domingo.
btw: teve que usar expr ao invés de $ ((...)) porque o posterior não parece gostar de números com zeros à esquerda.