J’ai une ligne qui utilise awk pour transformer rapidement du gmt en localtime (gmt+2) sauf que je perd les FS et je trouve pas de manière de les conserver.
[code]2012-05-12 08:50:06.462957|INFO |VirtualServer | 1| client connected ‘name1’(id:41) from ip.ip.ip.ip:55401
2012-05-12 09:55:19.051825|INFO |VirtualServer | 1| client connected ‘name2’(id:13) from ip.ip.ip.ip:50176
Ps: le fond du problème sur le gmt n’est pas important, je sais que pour 23h et 24h je passe a 25h et 26h et pareil pour le gmt+2 qui devient gmt+1 en hiver
Pourquoi ne pas garder le FS par défaut, c’est à dire les espaces,
tabulations, etc, et travailler sur les deux premiers digits de $2,
puisque ses champs internes ont une structure fixe?
Avec les fonctions de la famille sub() par exemple.
[quote]
Je viens de trouver un truc qui marche mais je trouve ça assez crade
[/quote]
Non, pourquoi ce serait crade? L’essentiel, c’est le résultat.
Par contre, pour les digits, tu peux utiliser les motifs
[[:digit:]]{n}, avec n représentant le nombre de chiffres de ton
motif. Tu gagneras en clarté et tu seras plus précis dans ton
motif. Le risque de bugs sera moins important.
Regardes dans la documentation tout de même, j’écris de mémoire.
Les expressions rationnelles sont extrêmement puissantes, et le fait
de les utiliser avec les fonctions de manipulation de chaînes les
rendent quasi démoniaque!
C’est d’autant mieux, que si un enregistrement a eu lieu à 23 heures nn minutes nn.nnnn secondes,
contrairement à ta méthode qui affichera «25:nn:nn.nnnnn,
`date’ fera passer au jour suivant.
Comme signalé plus haut, GNU awk dispose de fonctions date-time intéressantes pour ce problème. Il est donc possible de faire un calcul sur une date sans passer par des commandes externes. Le passage de minuit au jour ou mois suivant se fera également sans problème.