Bonjour à tous;
la simplicité du titre cache la sophistication de ce que je veux parvenir à faire, mais je pouvais pas tout mettre dans le titre, ça rentrait pas
Mais en gros cette approche est un bon point de départ.
Alors .... Soit un fichier contenant des dizaines de lignes dont voici quelques lignes en exemple: un fichier datas.txt.bak
et j'ai planché toute la nuit sans succès, pour obtenir ce type de sortie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 jour="3" article="banane" pepins="sans" categorie="fruit" article="banane" pepins="sans" categorie="fruit" jour="6" article="orange" pepins="avec" categorie="fruit" article="courgette" pepins="sans" categorie="legume" jour="5" article="pomme" pepins="avec" categorie="fruit" article="orange" pepins="avec" categorie="fruit"
Évidemment que dans le cadre d'une fonction, j'aurais pu m'en sortir en traitant ligne par ligne, mais j'ai fait chauffer les neurones pour trouver la ligne de code pure et élégante, en
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 jour="3" article="banane" pepins="sans" categorie="fruit" jour="6" article="orange:[courgette]" pepins="avec:[sans]" categorie="fruit:[legume]" jour="5" article="pomme:[orange]" pepins="avec" categorie="fruit"
vain. Je soupçonne Awk d'être la commande de la situation, mais c'est pas assez mon pote pour le convoquer, j'ai préféré me tourner vers Sed.
Vu la sortie attendue, j'ai besoin de l'aide d'un surdoué du scripting, à mon avis. Il est aussi envisageable que ce soit impossible à faire, sauf à pondre une fonction.
j'étais parti sur un truc du style (c'est pas ça qui m'a pris toute la nuit j'ai beaucoup lu aussi :
qui donne ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part cat datas.txt.bak > datas.txt; while read line; do newline="$(echo "$line"|tr ' ' '\n'|sort -u|tr '\n' ' ')"; sed -i 's%'"$line"'%'"$newline"'%g' datas.txt;done< <(sed '/jour/p' datas.txt)
Mettons que article, categorie, jour, pepins, soient les noms de colonnes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 article="banane" categorie="fruit" jour="3" pepins="sans" article="courgette" article="orange" categorie="fruit" categorie="legume" jour="6" pepins="avec" pepins="sans" article="orange" article="pomme" categorie="fruit" jour="5" pepins="avec"
On voit bien que les valeurs identiques sont réduites à une occurrence (ex ligne 3 +> categorie="fruit" voit son doublon supprimé)
Évidement je n'ai pas fusionné les valeurs différentes pour une colonne de même nom comme dans la sortie souhaité.
Mais j'ai une autre contrainte aussi, je veux que l'ordre des colonnes soit respecté tel que présenté dans le fichier source, c'est à dire
jour - article - pepins - categorie (ordre préservé).
Pensez vous que c'est faisable ? En fait je pense qu'il y a moyen de manipuler les colonnes tel que je veux mais je n'ai pas les connaissances
Partager