Il y a plusieurs façons de le faire mais si c'est simplement occasionnel et que tu cherches la façon la plus « facile » de le faire, tu peux essayer avec join. Le problème vient du fait qu'il faut déjà générer une suite complète et contiguë de dates vaildes, en tenant comptes des années bissextiles, etc. Pour cela, tu peux exploiter les possibilités offertes par date.
Sous Bash, commence par générer une suite de dates valides au format que tu utilises dans ton fichier :
$ for i in {5000..1} ; do date "$i day ago" +'%Y%m%d' ; done > datesvalides.txt
Le « 5000 » est là pour dire que je remonte cinq mille jours en arrière, soit courant 1999 à la date où j'écris ce commentaire. Je ne sais pas s'il y a moyen de spécifier une date de départ ET de faire faire un calcul à « date », et ça me fatigue de chercher pour le moment. :-)
Ensuite, tu utilises « join » pour faire une « jointure » entre tes deux fichiers, c'est-à-dire associer une ligne de l'un avec une ligne de l'autre en fonction d'un champ commun et de même valeur. Il faut également passer un paramètre pour effectuer une « jointure ouverte », c'est-à-dire toujours intégrer la ligne d'un fichier donné même si elle n'existe pas dans l'autre :
$ join -a1 datesvalides.txt tonfichier.txt > resultatintermedaire.txt
À ce stade, tu devrais avoir la liste complète des dates, la plupart du temps vides, avec les bonnes valeurs si elles existent.
Tu utilises enfin « sed » pour reconnaître les lignes vides (uniquement la date donc), et les transformer en ligne avec la date suivie « -999 » :
$ sed -e "s/\([[:space:]]*[0-9]\+[[:space:]]*\)$/\1 -999/g" resultatintermediaire.txt > resultatfinal.txt
Et tu devrais obtenir ce dont tu as besoin. Deux remarques cependant :
- Vérifie si tes fichiers utilisent des espaces ou des tabulations comme séparateurs ;
- Les « jointures » sont la pierre angulaire des bases de données et elles sont extrêmement courantes en informatique. Beaucoup de scientifiques travaillant dans les laboratoires ou centres de recherche, et ayant un petit bagage informatique sans en faire leur métier y sont souvent confrontés. Généralement, ces gens-là commencent avec Excel puis, arrivés à ce stade, essaie de se débrouiller à coups de VLOOKUP.
Si tu es dans la deuxième situation et si tu as beaucoup de données à traiter de la sorte, je t'encourage à te tourner à terme vers les bases de données et apprendre le SQL si tu ne le connais pas encore. Par la suite, soit tu utilises une suite bureautique adaptée comme Access ou OObase, soit tu te fais une mini base de données dans ton /home avec « sqlite », qui est très à la mode, soit tu montes une vraie base de données avec MySQL ou PostgreSQL, ou tu demandes à ton administrateur système de le faire pour toi sur un de ses serveurs.
Partager