Afficher les lignes une par une

PiLoTe -  
zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour, j' ai ecris ce programme et je ne comprend pas pourquoi une érreur (ligne 10: 100]: Aucun fichier ou dossier de ce type) apparait.
je voudrai afficher les 100 premières lignes d'un fichier sans utiliser cat ou autre.

#!/bin/bash


a=$(wc $1)
lines=$(echo $a|cut -d' ' -f1)
words=$(echo $a|cut -d' ' -f2)
chars=$(echo $a|cut -d' ' -f3)
i=0

while [$i < 100]
do
 sed -n "$i p" $1
 i++
done

echo "il y a $lines de lignes"


Configuration: Linux / Chrome 83.0.4103.106

3 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    Il faut des espaces autour des crochets.

    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      < et >
      ne s'appliquent qu'à des chaînes de caractères.
      Pour les chiffres il faut employer
      -eq, -ne, -lt, -le, -gt ou -ge


      sed n'aime pas la valeur "0" il faut déclarer ta variable $i à 1.

      Pour incrémenter une variable :
      ((i++))


      Pour info :

      $ wc test.txt 
      244 1566 34082 test.txt

      $ wc -l < test.txt
      244

      $ wc -m < test.txt
      34082

      $ wc -w < test.txt
      1566


      Sinon, cette commande fait la même chose que ce qu'est censé faire ton script :
      sed -n '1,100p' ton_fichier && echo "Il y a $(wc -l < ton_fichier) lignes."
      0
  2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Re-
    je voudrai afficher les 100 premières lignes d'un fichier sans utiliser cat ou autre.
    Donc en shell pur ;-)

    Fichier de 100 lignes (ici je n'affiche que les 5 premières et dernières lignes du fichier) :
    $ head -5 f1 && echo "[…]" && tail -5 f1
    ligne 1
    ligne 2
    ligne 3
    ligne 4
    ligne 5
    […]
    ligne 96
    ligne 97
    ligne 98
    ligne 99
    ligne 100


    Le script (qui n'affiche que les 10 premières lignes) :
    $ cat bar.sh 
    #!/bin/bash

    mapfile -t tableau < $1

    for (( i=0 ; i < 10 ; i++ ))
    do
    echo "${tableau[$i]}"
    done

    echo "il y a ${#tableau[@]} lignes"


    L'exécution :
    $ ./bar.sh f1
    ligne 1
    ligne 2
    ligne 3
    ligne 4
    ligne 5
    ligne 6
    ligne 7
    ligne 8
    ligne 9
    ligne 10
    il y a 100 lignes


    ;-))
    0