Bonjour à tous,
J'ai un petit problème avec AWK. J'ai un gros fichier texte (récupéré depuis une APIREST) que j'ai besoin de parser et réécrire quelques éléments. Je m'étais orienté vers une boucle qui lit toutes les lignes du fichier (while / read) mais c'est beaucoup trop long.
Je me suis dit que la meilleur manière de faire, la plus optimisé, est d'utiliser awk. Mais je me heurte à un problème...
Voici le contenu de mon fichier :
...
FRA118;FR240;20180714;20180714;holiday
FRA118;FR240;20181111;20181111;holiday
FRA118;FR240;20181202;20181202;exceptional
...
L'idée c'est, sur chaque ligne, prendre la première date (en $3) et de la réécrire avec juste le jour. Par exemple, pour "20180714", je veux "mardi" à la place.
voilà ou j'en suis :
Sur une ligne ça marche avec ce code :
echo "FRA118;FR240;20180714;20180714;holiday" | awk -F";" 'BEGIN {OFS="/"} {cmd = "date -d \"" $3 "\" \"+%A\"" |& getline d;close(cmd);print $1 ";" $2 ";" d ";" substr($4,7,2), substr($4,5,2), substr($4,1,4) ";" $5}'
mais lorsque je spécifie le fichier... :
awk -F";" 'BEGIN {OFS="/"} {cmd = "date -d \"" $3 "\" \"+%A\"" |& getline d;close(cmd);print $1 ";" $2 ";" d ";" substr($4,7,2), substr($4,5,2), substr($4,1,4) ";" $5}' TOTO2.txt
J'avais aussi cette alternative mais ça ne marche pas non plus, j'ai tout le temps le même jour... :
awk -F";" 'BEGIN {OFS="/"} {s=strftime("%A", ($3), 1) ;print $1 ";" $2 ";" (s) ";" substr($4,7,2), substr($4,5,2), substr($4,1,4) ";" $5}' TOTO2.txt
C'est fou car sur les premières lignes de mon fichier, j'ai bien le résultat attendu mais à un moment donné, ça ne marche plus et awk me renvoie des mauvais jours et sur 40 lignes parfois... Ça je ne comprend pas...
Je vous met en PJ le fichier texte que je veux traiter.
Si quelqu'un a une idée ou une autre manière de faire sans être obligé de lire le fichier ligne par ligne, je suis preneur 
Merci de votre aide !
TOTO2.txt
Cordialement,
Johann
Partager