Existe-t-il un outil dans Solaris UNIX (donc aucun outil GNU disponible) pour soustraire les dates? Je sais que sous Linux, nous avons gawk
qui peut soustraire une date d'une autre. Mais dans Solaris le maximum que nous avons est nawk
(amélioré awk
) qui ne peut pas effectuer de calculs de date. Je ne peux pas non plus utiliser perl.
Existe-t-il un moyen de faire des calculs de date comme 20100909 - 20001010
?
MISE À JOUR: Est-il bc
capable d'effectuer des calculs de dates?
Réponses:
Voici un script awk que je viens d'écrire, devrait fonctionner avec un awk POSIX. Vous devrez essayer la version Solaris; rappelez-vous qu'il existe également deux versions d'Awk sur Solaris, une dans / bin et une dans / usr / xpg4 / bin / awk (qui est nawk, je crois).
Passez une chaîne de date YYYYmmdd et elle sera convertie en nombre de secondes depuis l'époque (avec un peu de donner pour être sur les limites du jour). Ensuite, vous pourrez soustraire les deux.
la source
Malheureusement, aucun des utilitaires de ligne de commande POSIX ne fournit d'arithmétique sur les dates.
date -d
etdate +%s
sont le chemin à parcourir si vous les avez, mais ce sont des extensions GNU.Il y a un hack maladroit avec
touch
ce genre d'œuvres pour vérifier qu'une date est au moins n jours dans le passé:(Notez que ce code peut être désactivé de un si DST a démarré ou s'est arrêté dans l'intervalle et que le script s'exécute avant 1 heure du matin.)
Plusieurs personnes ont fini par implémenter des bibliothèques de manipulation de dates dans Bourne ou shell POSIX. Il y a quelques exemples et liens dans la FAQ comp.unix.shell .
L'installation d'outils GNU peut être le moyen le moins pénible.
la source
J'essaierais d'utiliser la
date
commande qui fait partie de POSIX donc elle est à peu près partout. MISE À JOUR: Malheureusement, il semble que -d ne fait pas partie de la date POSIX et n'est probablement pas là sur Solaris. Ainsi, cela ne répondra probablement pas à la question des PO.Maintenant
d1
etd2
sont des entiers qui correspondent aux secondes depuis l'époque unix. Ainsi, pour obtenir la différence entre les deux, nous soustrayons ($((d1-d2))
en bash) et convertissons à toutes les unités que nous voulons. Les jours sont les plus faciles:La façon de faire la conversion sera probablement différente si vous n'avez pas bash. Le moyen le plus portable peut être d'utiliser
expr
( la page de manuel posix d'expr ).la source
Pour mémoire, dateutils est ma tentative de fournir un ensemble d'outils portables couvrant l'arithmétique des dattes. Votre exemple se résume à
Le
-i
spécifie le format d'entrée.la source
Perl est susceptible d'être installé, et il est assez facile d'extraire des modules de CPAN , de les installer dans votre répertoire personnel et de vous y référer dans votre programme. Dans ce cas, le module Date :: Calc a un
Delta_Days
sous-programme qui vous aidera.la source
Date GNU par rapport à Solaris:
Je le redis:
Trop de Solaris SysAdmins sont fiers de ne pas avoir délibérément installé les packages officiels de Sun (maintenant Oracle) qui rendent un système Solaris "compatible GNU" lorsqu'ils configurent un nouvel hôte. Me bat pourquoi.
GNU Date est excellent et devrait être disponible par défaut sur tout hôte Solaris, à mon humble avis.
Sous Solaris 10
Installez le package SFWcoreu à partir du CD Solaris Companion. Après l'installation, vous trouverez la date GNU dans
/opt/sfw/bin/date
Sous Solaris 11
Vous l'avez peut-être déjà, car je pense qu'il fait partie de l'installation standard. Il est cependant appelé
gdate
afin de le distinguer de la version Sun de la date.Faites-le s'il n'est pas installé:
la source
/usr/bin/gdate
et/usr/gnu/bin/date
vous pouvez donc choisir de l'utiliser soit par nom, soit par paramètre $ PATH.Si vous avez Python:
Vous avez marqué votre question "gawk" mais vous dites "pas d'outils GNU". Gawk a l'arithmétique des dates.
la source
python:
la source
1. Définissez la date1 et la date2 au
%j
format jour de l'année (001..366)2. Calculez la différence avec
expr
3. Donc, la réponse est de 32 jours
... ou solution monoligne
ou
ou
la source
Avec date BSD pour macOS:
la source
Vous pouvez utiliser la bibliothèque awk Velour pour renvoyer la différence en quelques secondes:
Ou jours:
la source