# suppression 100e ligne et au dela



## symbol (3 Juillet 2018)

Bonjour,

J'ai un fichier texte ou sont ajoutés des lignes de texte (1 ligne ajouté toutes les 6 heures en gros).

Je souhaite que la limite de ce fichier ne dépasse pas 100 lignes.

j'ai vu que la commande SED, peut supprimer la derniere ligne d'un fichier texte.


```
sed '$d' /Users/xxx/Desktop/test.txt > /Users/xxx/Desktop/test2.txt
```

Actuellement mon fichier n'a que 2 lignes, mais d'ici 50 jours, on arrivera a 100 lignes et au dela.

Comment faire pour SED supprime la 101e et au dela dans mon fichier texte ?

Merci


----------



## symbol (3 Juillet 2018)

Je me reponds a moi même

Voici ce que j'ai essayé et qui marche


```
sed -e '101,110d' /Users/xxx/Desktop/test.txt > /Users/xxx/Desktop/test2.txt
```


----------



## macomaniac (3 Juillet 2018)

Salut *symbol
*
Tu peux faire :

```
sed -e '101,$d' inputfile > outpufile
```


----------



## Membre supprimé 1129907 (3 Juillet 2018)

La fonction head fait cela de base 

```
head -100 /Users/xxx/Desktop/test.txt > /Users/xxx/Desktop/test2.txt
```


----------



## symbol (4 Juillet 2018)

Merci de vos réponses.

Je remet les mains dans le camboui.

Maintenant que la 100e ligne est supprimée, je souhaite ajouter le resultat (du RECAP, qui est composée d'1 ligne de texte) au début de mon fichier texte.

je me suis basé sur ces exemples 










je fais :

```
####### inscription "PAS DE GAGNANT" si aucun gagnant detecté dans le fichier RESULTATS.txt #######
if grep -q ★ /Users/xxx/Desktop/KENODATA/RESULTATS.txt  ; then
    echo ""
else
    echo "PAS DE GAGNANT pour ce tirage !" >> /Users/xxx/Desktop/KENODATA/RESULTATS.txt
    sed -i '1i "${affichagedate}" PAS DE GAGNANT pour ce tirage !' >>  /Users/xxx/Desktop/KENODATA/RESULTATSHISTORIQUE.txt
    echo "" >> /Users/xxx/Desktop/KENODATA/RESULTATS.txt
fi
```

Mais j'ai une erreur qui apparait dans le terminal
sed: -i may not be used with stdin

De plus ca ne fonctionne pas :-/

```
sed -i '1i "${affichagedate}" PAS DE GAGNANT pour ce tirage !' >>  /Users/xxx/Desktop/KENODATA/RESULTATSHISTORIQUE.txt
```

Un chti coup de main ?  

Merci


----------



## flotow (4 Juillet 2018)

Pourquoi ne pas ajouter la premiere ligne d'abord (ton fichier passe de 100 lignes a 101) puis supprimer la derniere ligne avec head ?


```
echo "nouvelle ligne 1" > fichier
head -100 fichier > fichier.copie
```


----------



## symbol (4 Juillet 2018)

J'ai un petit dessin pour bien faire comprendre ce que je voudrais.
(Le tout se trouve dans un fichier texte : RESULTATSHISTORIQUE.txt)


----------



## symbol (4 Juillet 2018)

*flotow*
Avec ton code, la nouvelle ligne est ajoutée en BAS de mon fichier texte. Je veux qu'elle soit en haut (1ere ligne).


----------



## flotow (4 Juillet 2018)

symbol a dit:


> *flotow*
> Avec ton code, la nouvelle ligne est ajoutée en BAS de mon fichier texte. Je veux qu'elle soit en haut (1ere ligne).


oups 
j'ai pas fait attention à ça...
effectivement, ce que je propose ne sert absolument à rien dès lors que le fichier aura déjà 100 lignes


----------



## flotow (4 Juillet 2018)

me revoilà...
c'est surtout pour proposer une solution qui fonctionne 
pas sur que ca soit plus rapide que sed par contre (mais ça fonctionne !)


```
echo "ligne 1" | cat - liste | head -100 > nouvelle.liste
```

en fait, ça ne fonctionne pas dans tcsh mais ça fonctionne dans bash (en tout cas ici)
avec tcsh, j'ai nouvelle.liste = liste si je lance cette ligne


----------



## symbol (4 Juillet 2018)

La syntaxe exact dans mon cas c'est quoi,  ca ?

    echo "${affichagedate}  PAS DE GAGNANT pour ce tirage !" | cat -  /Users/xxx/Desktop/KENODATA/RESULTATSHISTORIQUE.txt | head -100 >  /Users/xxx/Desktop/KENODATA/RESULTATSHISTORIQUE.txt


----------



## flotow (4 Juillet 2018)

symbol a dit:


> La syntaxe exact dans mon cas c'est quoi,  ca ?
> 
> echo "${affichagedate}  PAS DE GAGNANT pour ce tirage !" | cat -  /Users/xxx/Desktop/KENODATA/RESULTATSHISTORIQUE.txt | head -100 >  /Users/xxx/Desktop/KENODATA/RESULTATSHISTORIQUE.txt


sur le principe oui, mais je ne sais pas si echo sais executer une procedure


----------



## Membre supprimé 1129907 (4 Juillet 2018)

```
echo "${affichagedate} PAS DE GAGNANT pour ce tirage !" > /Users/xxx/Desktop/KENODATA/RESULTATSHISTORIQUE.txt-tmp
cat /Users/xxx/Desktop/KENODATA/RESULTATSHISTORIQUE.txt >> /Users/xxx/Desktop/KENODATA/RESULTATSHISTORIQUE.txt-tmp
head -100 /Users/xxx/Desktop/KENODATA/RESULTATSHISTORIQUE.txt-tmp > /Users/xxx/Desktop/KENODATA/RESULTATSHISTORIQUE.txt
rm -f /Users/xxx/Desktop/KENODATA/RESULTATSHISTORIQUE.txt-tmp
```


----------



## symbol (4 Juillet 2018)

Ca semble fonctionner. Je fais plus de tests et tiens au courant 

Merci a flotow + ecatomb


----------



## flotow (4 Juillet 2018)

symbol a dit:


> Ca semble fonctionner. Je fais plus de tests et tiens au courant
> 
> Merci a flotow + ecatomb


Content d'avoir pu aider à cette grande aventure que tu partages avec le KENO


----------



## symbol (4 Juillet 2018)

me revoila.

Tout semble OK.

voici le fichier texte généré avec le bon code (ensuite converti en PDF).


----------



## Membre supprimé 1129907 (4 Juillet 2018)

Cool, j'ai gagné le jackpot


----------



## symbol (5 Juillet 2018)

Question concernant la commande  head -100

Est-ce cette commande supprime TOUTES les lignes au dessus (ou en dessous, ca depends comment on compte) de la 100e ligne ou uniquement la 101e ligne ?
(je pose la question, car il est possible que plusieurs lignes soient ajoutées (en une fois) après la 100e ligne, et du coup, si HEAD ne supprime que la 101e, il restera des lignes indésirables)

 merci


----------



## macomaniac (5 Juillet 2018)

La commande :

```
head -100 inputfile
```


affiche à l'écran (*stdout* : *st*an*d*ard_*out*put) toutes les lignes du fichier de la n°*1* à la n°*100* incluse

Une commande :

```
head -100 inputfile > outputfile
```


effectue la même chose > mais en remplaçant la sortie *stdout* par l'*outputfile* (fichier).


----------



## symbol (5 Juillet 2018)

Merci de ta réponse.

donc ? peut importe le nombre de lignes, ca sera toujours "coupé" a 100 lignes ?


----------



## flotow (5 Juillet 2018)

symbol a dit:


> Merci de ta réponse.
> 
> donc ? toutes les lignes au dessus de 100 seront supprimées ?



toutes les lignes en dessous de la 100e seront supprimées
_head _(tête) ne garde toutes les lignes de la premiere jusqu'à celle que tu as défini
à l'inverse, tu as _tail _(queue) qui ne garde que les n dernières lignes (en partant du bas donc), si tu as 10 lignes, tu fais un tail -n 5, tu n'auras que la ligne 6 à 10


----------



## symbol (5 Juillet 2018)

Merci.


----------

