6 votes

Formatage arithmétique de la date en Bash

J'ai un script qui crée les dossiers de la semaine précédente avec le numéro de la semaine dans le nom. Voici comment je récupère la valeur du numéro de la semaine en cours et j'attribue le numéro de la semaine précédente.

WEEKNBR=$(date +"%V")
PREVWK=$((WEEKNBR-1))

La valeur de WEEKNBR se présente sous la forme de deux chiffres, par exemple "Semaine 05", mais le numéro d'identification de l'entreprise est le même. PREVWK serait "WEEK4".
Comment faire pour soustraire 1 de WEEKNBR et faire en sorte que le résultat soit précédé de 0 le cas échéant ?

7voto

muru Points 725

Vous pouvez utiliser date pour faire l'arithmétique pour vous. Avec date BSD :

$ /bin/date +%V
03
$ /bin/date -v-1w +%V
02

Desde man date :

-v   Adjust (i.e., take the current date and display the result of the
     adjustment; not actually set the date) the second, minute, hour,
     month day, week day, month or year according to val.  If val is
     preceded with a plus or minus sign, the date is adjusted forwards
     or backwards according to the remaining string, otherwise the
     relevant part of the date is set.  The date can be adjusted as
     many times as required using these flags.  Flags are processed in
     the order given.

Dans le cas où vous avez installé et utilisez GNU date :

$ date -d '-1week' +%V
02
$ date -d '-1 week' +%V
02
$ date -d 'now - 1 week' +%V
02
$ date -d 'last week' +%V
02

2voto

klanomath Points 63400

Un "one-liner" (ok, deux-liner) est

WEEKNBR=$(date +"%V")
PREVWK=$(printf %02d $((WEEKNBR-1)))

1voto

ProGrammer Points 2210

Je pense que ce que vous cherchez ici est un moyen de vérifier si $PREVWK est de 2 chiffres ou non, auquel cas vous ajoutez respectivement un préfixe 0 au début du numéro existant ou non.

Mise en œuvre :

WEEKNBR=$(date +"%V")
PREVWK=$((WEEKNBR-1))

if [[ $(echo -n ${PREVWK} | wc -c) -lt 2 ]] ; then
    PREVWK="0${PREVWK}"
fi

Il regarde le nombre de chiffres de la variable (assurez-vous qu'il s'agit toujours d'un nombre) et décide si elle est composée de moins de 2 chiffres. Si c'est le cas, il ajoute 0 sinon, il laisse le numéro tel quel. De cette façon, des semaines comme 23 restera comme 23 au lieu de 023 et ainsi de suite.

Faites-moi savoir si cela fonctionne pour vous ou si vous cherchez un autre moyen d'y parvenir. Vous pouvez également vérifier si le nombre dans son ensemble est inférieur à 10, ce qui signifie qu'un signe de tête 0 doit être ajouté.

1voto

Wildcard Points 874

Une approche en une phrase qui ne se briseront pas à l'arrivée de la nouvelle année. et cela donne toujours le bon numéro de semaine pour les sept jours précédant le moment présent :

weeknbr="$(date +%V)"
prevwk="$(date -j -v -7d +%V)"

Notez que j'utilise des noms en minuscules car ce ne sont pas (ou ne devraient pas être) des variables d'environnement ; voir :


P.S. : Je vois que muru a écrit une réponse essentiellement identique, mais j'ai laissé cet onglet ouvert pendant plusieurs heures avant d'y revenir et j'ai négligé de l'actualiser.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X