suppression 100e ligne et au dela

symbol

Membre émérite
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
 

symbol

Membre émérite
13 Octobre 2004
536
25
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
 

ecatomb

Membre d’élite
Club MacG
21 Septembre 2016
3 761
1 155
La fonction head fait cela de base ;)
Bloc de code:
head -100 /Users/xxx/Desktop/test.txt > /Users/xxx/Desktop/test2.txt
 

symbol

Membre émérite
13 Octobre 2004
536
25
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 :
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:

flotow

AppIeSpirit™
Club MacG
23 Mars 2004
12 509
2 300
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
 

symbol

Membre émérite
13 Octobre 2004
536
25
J'ai un petit dessin pour bien faire comprendre ce que je voudrais.
(Le tout se trouve dans un fichier texte : RESULTATSHISTORIQUE.txt)

 

symbol

Membre émérite
13 Octobre 2004
536
25
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

AppIeSpirit™
Club MacG
23 Mars 2004
12 509
2 300
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
 

flotow

AppIeSpirit™
Club MacG
23 Mars 2004
12 509
2 300
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:

symbol

Membre émérite
13 Octobre 2004
536
25
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

AppIeSpirit™
Club MacG
23 Mars 2004
12 509
2 300
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
 

ecatomb

Membre d’élite
Club MacG
21 Septembre 2016
3 761
1 155
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

symbol

Membre émérite
13 Octobre 2004
536
25
Ca semble fonctionner. Je fais plus de tests et tiens au courant :)

Merci a flotow + ecatomb :coucou:
 
  • J’aime
Réactions: flotow

symbol

Membre émérite
13 Octobre 2004
536
25
me revoila.

Tout semble OK.

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

symbol

Membre émérite
13 Octobre 2004
536
25
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:

macomaniac

Ouroboros
Club MacG
20 Septembre 2012
71 509
21 441
Forêt de Fontainebleau
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).
 

symbol

Membre émérite
13 Octobre 2004
536
25
Merci de ta réponse.

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