suppression 100e ligne et au dela

symbol

Membre actif
13 Octobre 2004
536
25
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.

Bloc de code:
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
 
Je me reponds a moi même

Voici ce que j'ai essayé et qui marche

Bloc de code:
sed -e '101,110d' /Users/xxx/Desktop/test.txt > /Users/xxx/Desktop/test2.txt
 
La fonction head fait cela de base ;)
Bloc de code:
head -100 /Users/xxx/Desktop/test.txt > /Users/xxx/Desktop/test2.txt
 
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
Capture_d_e_cran_2018_07_04_a_09_41_20.png






je fais :
Bloc de code:
####### 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 :-/
Bloc de code:
sed -i '1i "${affichagedate}" PAS DE GAGNANT pour ce tirage !' >>  /Users/xxx/Desktop/KENODATA/RESULTATSHISTORIQUE.txt

Un chti coup de main ? :)

Merci
 
Dernière édition:
Pourquoi ne pas ajouter la premiere ligne d'abord (ton fichier passe de 100 lignes a 101) puis supprimer la derniere ligne avec head ?

Bloc de code:
echo "nouvelle ligne 1" > fichier
head -100 fichier > fichier.copie
 
J'ai un petit dessin pour bien faire comprendre ce que je voudrais.
(Le tout se trouve dans un fichier texte : RESULTATSHISTORIQUE.txt)

Capture_d_e_cran_2018_07_04_a_10_00_39_copie.png
 
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 :D
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
 
me revoilà...
c'est surtout pour proposer une solution qui fonctionne :D
pas sur que ca soit plus rapide que sed par contre (mais ça fonctionne !)

Bloc de code:
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
 
Dernière édition:
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
 
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
 
Bloc de code:
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
 
  • J’aime
Réactions: symbol
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
 
Dernière édition:
La commande :
Bloc de code:
head -100 inputfile

  • affiche à l'écran (stdout : standard_output) toutes les lignes du fichier de la n°1 à la n°100 incluse

Une commande :
Bloc de code:
head -100 inputfile > outputfile

  • effectue la même chose > mais en remplaçant la sortie stdout par l'outputfile (fichier).
 
Merci de ta réponse.

donc ? peut importe le nombre de lignes, ca sera toujours "coupé" a 100 lignes ?
 
Dernière édition: