Numéroter un texte avec script shell

Bonjour,

Je souhaite numéroter afficher le contenue d'un fichier texte
de manière de créer un script équivalent à la commande "cat -n fic.txt"
j'ai essayé ce code mais ça marche pas

echo donner le nom de fichier
read a
i=0
echo $i
b=cat $a|wc -l
while [ i le $b ]
do
i=$(($i+1))
echo $i
head -$i $a|tail -1
done


1 réponse

  1. Bonjour,

    Je vous propose cette solution :

    #! /bin/bash
    
    cpt=1
    while read line
    do
            echo $line | sed "s/${line}/     ${cpt}  ${line}/"
            (( cpt++ ))
    done < toto.txt
    


    Voici le résultat :
    1  TEST FILE
    2  HELLO
    3  WORLD
    


    On remplace tout simplement la ligne par le numéro + la ligne grâce à la commande sed. On incrémente le numéro de ligne dans la boucle de lecture.
    1. Contributeur
      Salut,

      sed "s/^/ ${cpt}  /" <<<"${line}"
      Sera tout aussi bien en lieu et place de la ligne 6 ;-))
    2. Je ne réponds pas à la question mais si "cat -n fic.txt" le fait, pourquoi chercher à le faire autrement ?

      là on remplace un appel à cat par des appels à sed je vois pas l'intérêt. Et ton exemple fait encore plus d'appels : wc, head, tail et même cat


      #!/bin/bash
      cat -n fic.txt
    3. Contributeur
      Je n'ai corrigé que la syntaxe sed pour la forme, mais il est vrai qu'un simple :
      echo  "${cpt} ${line}"
      est largement suffisant et fait largement le boulot ;-\
    4. C'est vrai merci pour la correction ;)

      Je ne vois pas non plus l'intérêt de remplacer une commande système par un script mais bon ... Peut être un exercice ....
    5. Bah si on réécrit la commande même en partie, dans ce cas l'appel à d'autres commandes hormis celles de base de bash devraient être interdites ! Sinon #!/bin/bash
      cat -n fic.txt est correct