• changer l'ordre des nombres en ligne de commande

    From Bernard Schoenacker@21:1/5 to All on Sat Mar 1 18:00:02 2025
    Bonjour,

    J'ai une recette de gâteau où les masses des ingrédients sont à la fin
    et je souhaiterais pouvoir les ordonnancer de telle façon que les quantités apparaissent en première colonne.

    Exemple (Allemand) :


    Butter 500 g

    Pour l'instant voici mon idée qui n'est "pas bonne" :

    echo -e "Butter 500 g" |sed -e 's/500 g/500g/g ; s/Butter/Rapsöl/g' |awk "{print $3 ; $1}"


    la valeur 500 est numérique, par conséquent, j'ai pensé à : <NUM>

    merci pour votre aimable attention

    sincèrement

    Bernard Schoenacker

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From =?UTF-8?Q?Beno=C3=AEt_Barbier?=@21:1/5 to All on Sat Mar 1 19:00:01 2025
    Bonjour,

    Si la liste est dans un ficher texte et que les séparations entre : nomIngrédient poids
    Par exemple n espace ou tab

    Tu peux utiliser les sélection en rectangle d'emacs https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles.html

    Ou mettre dans un fichier csv d'un tableur puis sélectionner et déplacer
    les colonnes

    Benoît

    Le 1/03/25 à 17:58, Bernard Schoenacker a écrit :
    Bonjour,

    J'ai une recette de gâteau où les masses des ingrédients sont à la fin
    et je souhaiterais pouvoir les ordonnancer de telle façon que les quantités apparaissent en première colonne.

    Exemple (Allemand) :


    Butter 500 g

    Pour l'instant voici mon idée qui n'est "pas bonne" :

    echo -e "Butter 500 g" |sed -e 's/500 g/500g/g ; s/Butter/Rapsöl/g' |awk "{print $3 ; $1}"


    la valeur 500 est numérique, par conséquent, j'ai pensé à : <NUM>

    merci pour votre aimable attention

    sincèrement

    Bernard Schoenacker


    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Jean Bernon@21:1/5 to All on Sat Mar 1 19:10:01 2025
    Ta commande aboutit a "Rapsol 500g" à cause des " et ;
    En revanche cette commande
    echo -e "Butter 500 g" |sed -e 's/500 g/500g/g ; s/Butter/Rapsöl/g' |awk '{print $2 " " $1}'
    aboutit à "500g Rapsol"
    C'est ce que tu veux ?

    ----- Mail original -----

    De: "Bernard Schoenacker" <[email protected]>
    À: "Debian user french" <[email protected]>
    Envoyé: Samedi 1 Mars 2025 17:58:40
    Objet: changer l'ordre des nombres en ligne de commande

    Bonjour,

    J'ai une recette de gâteau où les masses des ingrédients sont à la
    fin
    et je souhaiterais pouvoir les ordonnancer de telle façon que les
    quantités
    apparaissent en première colonne.

    Exemple (Allemand) :

    Butter 500 g

    Pour l'instant voici mon idée qui n'est "pas bonne" :

    echo -e "Butter 500 g" |sed -e 's/500 g/500g/g ; s/Butter/Rapsöl/g'
    |awk "{print $3 ; $1}"

    la valeur 500 est numérique, par conséquent, j'ai pensé à : <NUM>

    merci pour votre aimable attention

    sincèrement

    Bernard Schoenacker

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Bernard Schoenacker@21:1/5 to All on Sat Mar 1 21:10:01 2025
    Bonjour Benoît,

    Merci beaucoup pour le conseil, et effectivement, j'ai employé
    cette méthode équivalente avec neovim (pas de troll ni tirer
    sur le pianiste pour le tuer)

    Sincèrement

    Bernard Schoenacker

    ----- Mail original -----
    De: "Benoît Barbier" <[email protected]>
    À: [email protected]
    Envoyé: Samedi 1 Mars 2025 18:56:06
    Objet: Re: changer l'ordre des nombres en ligne de commande

    Bonjour,

    Si la liste est dans un ficher texte et que les séparations entre : nomIngrédient poids
    Par exemple n espace ou tab

    Tu peux utiliser les sélection en rectangle d'emacs https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles.html

    Ou mettre dans un fichier csv d'un tableur puis sélectionner et déplacer
    les colonnes

    Benoît

    Le 1/03/25 à 17:58, Bernard Schoenacker a écrit :
    Bonjour,

    J'ai une recette de gâteau où les masses des ingrédients sont à la fin
    et je souhaiterais pouvoir les ordonnancer de telle façon que les quantités apparaissent en première colonne.

    Exemple (Allemand) :


    Butter 500 g

    Pour l'instant voici mon idée qui n'est "pas bonne" :

    echo -e "Butter 500 g" |sed -e 's/500 g/500g/g ; s/Butter/Rapsöl/g' |awk "{print $3 ; $1}"


    la valeur 500 est numérique, par conséquent, j'ai pensé à : <NUM>

    merci pour votre aimable attention

    sincèrement

    Bernard Schoenacker


    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From [email protected]@21:1/5 to All on Sat Mar 1 22:20:02 2025
    Bonsoir Bernard,

    Cela te convient-il ?

    $ echo "Butter 500 g" | sed 's/\([^0-9]\+\) \([[:digit:]]\+\) \([[:alpha:]]\+\)/\2\3 \1/' | tr '[A-Z]' '[a-z]'
    500g butter
    $
    Bonne soirée,
    l0f4r0

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Marc Chantreux@21:1/5 to Bernard Schoenacker on Sat Mar 1 23:40:01 2025
    salut,

    On Sat, Mar 01, 2025 at 09:02:20PM +0100, Bernard Schoenacker wrote:
    Bonjour,
    Merci beaucoup pour la réponse, attention c'est juste un exemple dans une liste
    <terme de matière> " espace " <Qtité numérique> " espace" <unité g pour grammes>

    dans ton premier mail, le séparateur n'est pas un espace mais une
    tabulation. si c'est le cas tout le temps alors le problème est simple:

    <<% hd
    Butter 500g

    Ici c'est bien une tabulation
    v
    00000000 42 75 74 74 65 72 09 35 30 30 67 0a |Butter.500g.| 0000000c

    du coup:

    <<% awk -F'\t' -vOFS='\t' '{t=$1;$1=$2;$2=t}1'
    Butter 500g
    Amour pour le format TSV ∞

    ou une version plus verbeuse

    awk '
    BEGIN { FS = OFS = "\t" }
    {
    temp = $1
    $1 = $2
    $2 = temp
    }
    1 # toujours vrai donc fait toujours l'action par défaut ({print})
    '

    ou en perl si tu as de gros volumes (ce qui ne sera pas le cas pour une recette):

    <<% perl -plF'\t' -E '$_=join "\t", reverse @F'
    Butter 500g
    Amour pour le format TSV ∞


    Merci beaucoup pour la réponse, attention c'est juste un exemple dans une liste
    <terme de matière> " espace " <Qtité numérique> " espace" <unité g pour grammes>

    si tu dis vrai (on ne peut pa compter sur \t), faut prévoir les cas
    pourris du genre


    doliprane 1G 1 barquette
    huile d'olive ½ louche

    ma stratégie serait donc

    <produit> <ws>* <quantité> <ws>* <unité>

    et donc considérer que <quantité est la dernière valeur numérique de la ligne.


    <<% perl -plE '/(.*) *(\d+|[½¾]) *(.*)/; $_="$2 $3\t$1"'
    doliprane 1G 1 barquette
    huile d'olive ½ louche

    <<% sed -E 's/(.*) *([0-9]+|[½¾]) *(.*)/\2 \3\t\1/'
    doliprane 1G 1 barquette
    huile d'olive ½ louche

    bonne soirée


    --
    Marc Chantreux
    Pôle CESAR (Calcul et services avancés à la recherche)
    Université de Strasbourg
    14 rue René Descartes,
    BP 80010, 67084 STRASBOURG CEDEX
    03.68.85.60.79

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)