Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/06/2011, 15h49   #1
Candidat au titre de Membre du Club
 
Inscription : février 2008
Messages : 96
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 96
Points : 14
Points : 14
Par défaut Awk : test format date

Bonjour,

J'avais ouvert une discussion sur une methode pour substituer une chaine de caractère sur tout un fichier.

le point a été résolu :

http://www.developpez.net/forums/d10...r/#post6095019

Or je dois faire une modification à ce script car il se trouve que la donnée qui a été substituée, l'a été par une date format "YYYYMM". Or dans le fichier cette date est sous forme "YYYYMMDD".

Le problème rencontré est sur la validité de la date lorsque le Jour = 31 et que le mois demandé ne fait que 28, 29 ou 30 jours.

En somme si MM in ('01','03','05','08','10','12') ==> RAS
si MM in ('04','06','09','11') substituer 31 par 30
si MM = '02' alors substituer 29, 30 ou 31 par 28

Comme puis-ja faire cela ?

La commande awk existante :

Code :
nawk -v IDMOIS=${idmois} '{if (/30076.*2019/ || /10468.*224[0567]/) {print substr($0,1,4) IDMOIS substr($0,11)} }' $ficold > $fic
Merci.
patgabjoe est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/06/2011, 17h54   #2
Membre du Club
 
Avatar de aysheaia
 
E L
Inscription : juin 2011
Messages : 19
Détails du profil
Informations personnelles :
Nom : E L
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 19
Points : 62
Points : 62
Si le mois sur lequel se baser est dans la variable IDMOIS, par exemple :
Code :
1
2
 
nawk -v IDMOIS=${idmois} 'BEGIN { a["01"]=a["03"]=a["05"]=a["07"]=a["08"]=a["10"]=a["12"]=31; a["04"]=a["06"]=a["09"]=a["11"]=30; a["02"]=28; } { if (/30076.*2019/ || /10468.*224[0567]/) { jour=substr($0,11, 2); print substr($0,1,4) IDMOIS (jour < a[IDMOIS] ? jour : a[IDMOIS]) substr($0,13)} }' $ficold > $fic
aysheaia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 09h54   #3
Candidat au titre de Membre du Club
 
Inscription : février 2008
Messages : 96
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 96
Points : 14
Points : 14
Bonjour et merci bien pour cette aide.

Seulement maintenant, il m'a supprimé le jour de l'ensemble des lignes.

La sélection de lignes est toujours correcte, mais si nous avions 55 colonnes initialement, nous nous retrouvons avec 53 colonnes en résultat.

Où se trouve l'erreur ?
Merci.
patgabjoe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 10h10   #4
Candidat au titre de Membre du Club
 
Inscription : février 2008
Messages : 96
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 96
Points : 14
Points : 14
Et bien c'est fait !

IDMOIS = ANNEE+MOIS (AAAAMM)
Donc il me fallait pour utiliser ton tableau, initialiser une variable MOIS

MOIS = MM

donc la ligne devient :

avec MOIS=`echo $idmois | cut -c5,6`

Code :
nawk -v IDMOIS=${idmois} -v MOIS=${mois} 'BEGIN { a["01"]=a["03"]=a["05"]=a["07"]=a["08"]=a["10"]=a["12"]=31; a["04"]=a["06"]=a["09"]=a["11"]=30; a["02"]=28; } { if (/30076.*2019/ || /10468.*224[0567]/) { jour=substr($0,11, 2); print substr($0,1,4) IDMOIS (jour < a[MOIS] ? jour : a[MOIS]) substr($0,13)} }' $ficold > $fic
Encore merci.

Bonne journée et bon WE.
patgabjoe est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h48.


 
 
 
 
Partenaires

Hébergement Web