[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: changer l'ordre des nombres en ligne de commande



Bonjour,

dansle livre les expressions régulieres chez ENI il parle de wc pour compter les lignes !

#!/bin/bash if [ $# -ne 1 ]; then echo "Usage: $0 <nom_du_fichier>" exit 1 fi if [ ! -f "$1" ]; then echo "Fichier introuvable." exit 1 fi tac "$1" | nl -ba


Fait par Chatgpt ¡ je suis interessé  de voir une version avec wc ?

null


Le dim. 2 mars 2025 à 13:28, philippe L <ptilou@gmail.com> a écrit :
Slt,

Ah, inverser le comptage des lignes dans Vim ou Emacs! Voici comment vous pouvez le faire: **Pour Vim:** 1. Ouvrez le fichier dans Vim. 2. Tapez `:set nu` pour activer l'affichage des numéros de ligne. 3. Si vous souhaitez inverser l'ordre de comptage, vous devrez probablement créer une fonction personnalisée dans VimScript car Vim n'a pas de fonctionnalité intégrée pour cela. **Pour Emacs:** 1. Ouvrez le fichier dans Emacs. 2. Activez l'affichage des numéros de ligne en tapant `M-x linum-mode`. 3. Vous pouvez utiliser le package `nlinum` pour une meilleure gestion des numéros de ligne. Malheureusement, Emacs non plus ne prend pas en charge l'inversion de l'ordre de comptage des lignes directement. Vous devrez probablement créer une fonction personnalisée en Emacs Lisp. Si vous avez des questions spécifiques sur la création de ces fonctions personnalisées, n'hésitez pas à demander. C'est un défi intéressant!


null


Le sam. 1 mars 2025 à 23:42, Marc Chantreux <mc@unistra.fr> a écrit :
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


Reply to: