Afficher les lignes une par une

Fermé
PiLoTe - Modifié le 5 juil. 2020 à 14:52
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 6 juil. 2020 à 10:50
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

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 408
5 juil. 2020 à 14:54
Salut,

Il faut des espaces autour des crochets.

0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 408
Modifié le 6 juil. 2020 à 07:36
< 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
merci!
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 408
6 juil. 2020 à 10:50
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