Oui, parce que les solutions proposées sont indéboggables et ne relèvent que de bricolages «quick & dirty», le genre de choses que tu utilises quand tu n'as besoin que de faire quelque chose une fois et oublier à jamais. Et encore, il ne faut pas que ça soit quelque chose d'important.
Ben la solution que je propose n'est pas moins indeboggable pour qui connait awk que ne le serait une solution en python pour quelqu'un qui connait python. Si tu veux débogger, apprends à utiliser awk. Maintenant, il est vrai que j'aurais pu présenter ça sur plusieurs lignes pour rendre la solution plus lisible. Ca pourrait donner ça :
Initialement j'ai fait un truc simple en 4 lignes parce que le PI ne précise pas si c'est du one shot ou un truc à maintenir dans la durée, mais il y a moyen de mettre tout ça dans un fichier texte lisible qui sera interprêté par awk. Pour faire un truc plus générique, on peut variabiliser le nom du fichier de l'année précédente :
On passe ensuite les variables via l'option -v de awk (je ne me rappelle plus exactement la forme exacte, ça doit être un truc du genre -v var=value et on peut en mettre plusieurs mais je sais plus comment). Et pour l'utilisateur, on peut encapsuler ça dans un script sh qui masquera les appels à awk. Pour quelqu'un qui connait awk, c'est très lisible. En tout cas plus lisible que les solutions à base de cut, join et sed.
Je pourrais également m'arranger pour que le séparateur de champ en sortie soit le même que le séparateur de champ en entrée (en faisant un truc du genre OFS=FS mais je ne me rappelle plus exactement quelle est la bonne variable, un man awk pourrait répondre). Comme indiqué on pourrait aussi faire des vérifications plus poussées sur les divers champs et logger des erreurs sur stdout ou vers un autre fichier, tout en restant très lisible.
Dans l'absolu, awk est assez simple : il faut juste savoir comment il fonctionne : juste à comprendre les blocs BEGIN, END, et la façon dont awk parse chaque ligne. Ensuite ya qu'a lire la doc pour savoir comment utiliser les fonctions interne (ou écrire ses propres fonctions).
Pour info, j'ai déjà mis ce genre de truc en place sur un parc hétérogène, géré par des entités différentes, qui pouvaient pour certains avoir du python d'installé, pour d'autres du Perl, pour d'autres aucun des deux (et c'était imposé par la politique de sécurité de la boite). Les versions de Python ou Perl étaient différentes, et le seul dénominateur commun était les commandes standards du shell (et encore avec awk faut se méfier car les diverses implémentations peuvent avoir des comportements différents).
Sinon, si tu as lu ma proposition jusqu'au bout, tu remarqueras que j'ai invité le PI à une autre approche s'il s'aperçoit que son problème est plus compliqué.
[^] # Re: Quand on n'a qu'un marteau tout ressemble à un clou
Posté par totof2000 . En réponse au message Remplacer des cellules. Évalué à 6.
Ben la solution que je propose n'est pas moins indeboggable pour qui connait awk que ne le serait une solution en python pour quelqu'un qui connait python. Si tu veux débogger, apprends à utiliser awk. Maintenant, il est vrai que j'aurais pu présenter ça sur plusieurs lignes pour rendre la solution plus lisible. Ca pourrait donner ça :
Initialement j'ai fait un truc simple en 4 lignes parce que le PI ne précise pas si c'est du one shot ou un truc à maintenir dans la durée, mais il y a moyen de mettre tout ça dans un fichier texte lisible qui sera interprêté par awk. Pour faire un truc plus générique, on peut variabiliser le nom du fichier de l'année précédente :
On passe ensuite les variables via l'option -v de awk (je ne me rappelle plus exactement la forme exacte, ça doit être un truc du genre -v var=value et on peut en mettre plusieurs mais je sais plus comment). Et pour l'utilisateur, on peut encapsuler ça dans un script sh qui masquera les appels à awk. Pour quelqu'un qui connait awk, c'est très lisible. En tout cas plus lisible que les solutions à base de cut, join et sed.
Je pourrais également m'arranger pour que le séparateur de champ en sortie soit le même que le séparateur de champ en entrée (en faisant un truc du genre OFS=FS mais je ne me rappelle plus exactement quelle est la bonne variable, un man awk pourrait répondre). Comme indiqué on pourrait aussi faire des vérifications plus poussées sur les divers champs et logger des erreurs sur stdout ou vers un autre fichier, tout en restant très lisible.
Dans l'absolu, awk est assez simple : il faut juste savoir comment il fonctionne : juste à comprendre les blocs BEGIN, END, et la façon dont awk parse chaque ligne. Ensuite ya qu'a lire la doc pour savoir comment utiliser les fonctions interne (ou écrire ses propres fonctions).
Pour info, j'ai déjà mis ce genre de truc en place sur un parc hétérogène, géré par des entités différentes, qui pouvaient pour certains avoir du python d'installé, pour d'autres du Perl, pour d'autres aucun des deux (et c'était imposé par la politique de sécurité de la boite). Les versions de Python ou Perl étaient différentes, et le seul dénominateur commun était les commandes standards du shell (et encore avec awk faut se méfier car les diverses implémentations peuvent avoir des comportements différents).
Sinon, si tu as lu ma proposition jusqu'au bout, tu remarqueras que j'ai invité le PI à une autre approche s'il s'aperçoit que son problème est plus compliqué.