Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 08/04/2020, à 11:06

BenjiBoy

[RESOLU] passer une chaîne de carac. récupérée en date incrémentable.

Salut,

voilà une nouvelle problématique pour moi.

dans l'utilisation d'un script de récupération de données sur un numériseur, j'utilise un wget.
Le numériseur a une base de données, que je collecte en créant un fichier / jour (de 00:00:00 à 23:59:59) : cette fonction est prévue dans une requête du numériseur et il me suffit d'entrer une date spécifique de début et de fin, et le fichier est créé avec les dates correspondantes.

Cependant, il arrive que pour une raison x ou y, les données ne soient pas transmises tous les jours (la communication coupe par mauvais temps, en général).
Dans mon script j'ai prévu de lire la dernière ligne du dernier fichier arrivé, de manière à savoir quel est le dernier fichier présent, et d'ou repartir.

Le problème c'est que je veux toujours créer qu'un seul fichier / jour, s'il manque donc 10 jours, la fois ou le serveur a de nouveau accès au numériseur, il va falloir qu'il génère 10 requêtes wget, récupérant les fichiers journaliers.
Et mon soucis (on y arrive), c'est qu'autant il m'est facile de lire la dernière date du fichier présent (ex : 2020-04-01T00:00:00) et d'en faire une variable, autant je ne vois pas comment m'y prendre de manière simple pour lui ajouter 23:59:59.
J'aimerais - mais je ne sais pas si c'est possible - faire comprendre au shell que concernant cette chaîne de caractère il s'agit d'une date, et que je veux lui ajouter 24h - 1seconde.


Qu'en pensez-vous ?

a+

Dernière modification par BenjiBoy (Le 08/04/2020, à 11:35)

Hors ligne

#2 Le 08/04/2020, à 11:19

pingouinux

Re : [RESOLU] passer une chaîne de carac. récupérée en date incrémentable.

Bonjour,
Peut-être ceci :

$ date -d @$(($(date -d '2020-04-01 T00:00:00' +%s)+86399))
Wed Apr  1 23:59:59 CEST 2020

Hors ligne

#3 Le 08/04/2020, à 11:35

BenjiBoy

Re : [RESOLU] passer une chaîne de carac. récupérée en date incrémentable.

Ah mais date interprète ces chaînes ?


tail -1 test.dat 
"2020-04-01 08:59:00",199992,11.32,"2020-04-01 08:58:50",16.74,"2020-04-01 08:58:40"

date -d `tail -1 test.dat | awk -F " " '{print $1}' | sed s/\"//g `
mercredi 1 avril 2020, 00:00:00 (UTC+0200)

Et ben voui !
Ptin c'est top.

Merci beaucoup.

Hors ligne

#4 Le 08/04/2020, à 11:49

pingouinux

Re : [RESOLU] passer une chaîne de carac. récupérée en date incrémentable.

Tu peux te passer de tail et awk, en remplaçant

date -d `tail -1 test.dat | awk -F " " '{print $1}' | sed s/\"//g `

par

date -d $(sed -rn '$s/"([^ ]+) .*/\1/p' test.dat)

Hors ligne

#5 Le 08/04/2020, à 12:05

BenjiBoy

Re : [RESOLU] passer une chaîne de carac. récupérée en date incrémentable.

Wow ... Alors, juste pour ma culture personnelle, est-ce que tu aurais deux minutes pour m'expliquer le détail de cette commande qui m'est pour le moins, charabiesque.

Surtout la partie "$s/"([^ ]+) .*/\1/p" ou je panne vraiment rien.

On dirait ce qu'il y a écris dans un bulle de dialogue quand Astérix est contrarié ^^

Hors ligne

#6 Le 08/04/2020, à 12:55

pingouinux

Re : [RESOLU] passer une chaîne de carac. récupérée en date incrémentable.

"$s/"([^ ]+) .*/\1/p"
$ : dernière ligne du fichier
"([^ ]+) .* : la chaîne que l'on cherche (" suivi de 1 ou plus caractères qui ne sont pas des espaces, suivi d'une espace, suivi de 0 ou plus caractères quelconques)
\1 : la chaîne qui va remplacer la précédente (le contenu de ce qui était entre ( ))
p : on imprime la ligne

Hors ligne

#7 Le 08/04/2020, à 13:28

BenjiBoy

Re : [RESOLU] passer une chaîne de carac. récupérée en date incrémentable.

Merci beaucoup !
M'en vais épingler ce topic moi.

super koul
a+

Hors ligne

#8 Le 08/04/2020, à 16:52

kamaris

Re : [RESOLU] passer une chaîne de carac. récupérée en date incrémentable.

Tu as le paquet dateutils sinon, qui contient des outils assez pratiques, dont dateadd :

$ dateadd 2020-04-01T00:00:00 +23h59m59s
2020-04-01T23:59:59
$ 

Hors ligne

#9 Le 09/04/2020, à 14:34

BenjiBoy

Re : [RESOLU] passer une chaîne de carac. récupérée en date incrémentable.

OK bien noté kamaris, mais s'il y a de nouveaux outils ils faut que je demande aux admin de l'intégrer aux serveurs et en général ils sont pas très chaud (ce que je peux comprendre).
Mais ça reste bon à prendre pour moi !
a+

Hors ligne

#10 Le 09/04/2020, à 15:48

credenhill

Re : [RESOLU] passer une chaîne de carac. récupérée en date incrémentable.

hello
awk seul

$ awk -F '[" -]' 'END {print strftime("%A %d %B %Y %T %Z", mktime($2 " " $3 " " $4 " 23 59 59"))}' test.dat
Wednesday 01 April 2020 23:59:59 CEST

Hors ligne

#11 Le 09/04/2020, à 16:35

kamaris

Re : [RESOLU] passer une chaîne de carac. récupérée en date incrémentable.

gawk wink

Hors ligne