Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 17/04/2008, à 14:09

soupaloignon

[Résolu] Aide pour script enlevant la ligne "X" dans un fichier

Bonjour,

Lors de mes sauvegardes avec rsync je génére un fichier log m'indiquant les dates des sauvegardes, chaque sauvegarde rajoutant une ligne dans ce fichier.
Pour ceux que ça intéresse ça se passe ici : http://forum.ubuntu-fr.org/viewtopic.php?id=82232

rsync -rltgoDv --del --ignore-errors --force /home/soupaloignon/ /mnt/SAV/home/

sed -i 's/DERNIERE SAUVEGARDE LE/Cette ancienne sauvegarde date du/g' /home/soupaloignon/03\ outils/00scripts/sav-home-log
echo "DERNIERE SAUVEGARDE LE $(date +%d-%m-%y\ à\ %H\ heures-%M\ minutes-%S\ secondes)" >> /home/soupaloignon/03\ outils/00scripts/sav-home-log

Le problème c'est qu'au bout d'un moment le fichier log devient tres long, et je cherche un systeme pour y enlever des lignes.
Le fichier se présente sous cette forme

DATE ET HEURE DES SAUVEGARDES DU HOME

Cette ancienne sauvegarde date du 06-03-08 à 15 heures-28 minutes-23 secondes
Cette ancienne sauvegarde date du 06-03-08 à 15 heures-31 minutes-41 secondes
Cette ancienne sauvegarde date du 27-03-08 à 00 heures-31 minutes-44 secondes
Cette ancienne sauvegarde date du 09-04-08 à 03 heures-45 minutes-16 secondes
Cette ancienne sauvegarde date du 15-04-08 à 01 heures-14 minutes-39 secondes
DERNIERE SAUVEGARDE LE 15-04-08 à 01 heures-17 minutes-22 secondes

La 1ere partie du code sera donc de compter les lignes

awk 'END {print NR}' mon-fichier

Le résultat avec l'exemple plus haut serait donc 9.

Ensuite récupérer le résultat, et si le nombre de lignes est supérieur à 9, une commande enlevera la 4éme ligne, qui correspond à la plus vieille entrée

Cette ancienne sauvegarde date du 06-03-08 à 15 heures-28 minutes-23 secondes

Et c'est sur la ligne de commande qui enleve la 4eme ligne que je bloque. J'ai fait quelques recherches, sans trouver grand chose. La seule info c'ets ça :
Retirer la Nième ligne d'un fichier

sed -i 'Nd' fichier

Mais cela n'a rien donné, malgré quelques modifs :
sed -i 'Nd' fichier
sed -i 'Nd4' fichier
sed -i '4' fichier

Si quelqu'un a une idée la dessus, je suis preneur wink

Dernière modification par soupaloignon (Le 17/04/2008, à 17:11)


==> Libérez les huitres du bassin d'Arcachon <==

Hors ligne

#2 Le 17/04/2008, à 14:41

toufalk

Re : [Résolu] Aide pour script enlevant la ligne "X" dans un fichier

sed, je connais pas. Je sais que c'est puissant et j'ai prévu de regarder ça un jour.
En attendant, je te propose ceci

fichier=ton-fichier-de-log
#Pour avoir le nombre de ligne:
ligne=$(wc -l $fichier | cut -d" " -f1)
#on test
if [ "$ligne" -gt "9" ]; then
    # on copie les 3 premieres lignes
    head -n 3 $fichier > /tmp/fichier
    # puis les dernieres lignes
    tail -n $(( $ligne - 4 )) fichier >> /tmp/fichier
    mv /tmp/ficher $fichier
fi

Ce n'est pas forcement optimal, mais ça devrait marcher ( /!\ pas testé)

[edit] commentaires dans code

Dernière modification par toufalk (Le 17/04/2008, à 14:43)

Hors ligne

#3 Le 17/04/2008, à 14:47

best_friend_fr

Re : [Résolu] Aide pour script enlevant la ligne "X" dans un fichier

sed -i '4d' fichier

marche chez moi

Dernière modification par best_friend_fr (Le 17/04/2008, à 14:48)


sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr

Hors ligne

#4 Le 17/04/2008, à 14:56

soupaloignon

Re : [Résolu] Aide pour script enlevant la ligne "X" dans un fichier

best_friend_fr a écrit :
sed -i '4d' fichier

marche chez moi

Et chez moi aussi big_smile. Génial, merci beaucoup.

Je vais adapter cette ligne au script de toufalk


==> Libérez les huitres du bassin d'Arcachon <==

Hors ligne

#5 Le 17/04/2008, à 15:10

soupaloignon

Re : [Résolu] Aide pour script enlevant la ligne "X" dans un fichier

Merci à toufalk et à best_friend_fr.

Avec vos 2 messages j'ai réussi à bricoler ça :

#!/bin/bash 

fichier=sav-home-log-1
#Pour avoir le nombre de ligne:
ligne=$(wc -l $fichier | cut -d" " -f1)
#on test
if [ "$ligne" -gt "11" ]; then
    # on enleve
   sed -i '4d' $fichier
fi

Et qui correspond tout à fait à mes besoins

Juste pour info, si on veut enlever plusieurs lignes, de la 4 à la 6 par exemple, il faut coder cette ligne : sed -i '4d' $fichier
de quelle manière ?
(je n'en ai pas besoin, c'ets juste par curiosité)

Encore un grand merci à vous 2


==> Libérez les huitres du bassin d'Arcachon <==

Hors ligne

#6 Le 17/04/2008, à 15:15

best_friend_fr

Re : [Résolu] Aide pour script enlevant la ligne "X" dans un fichier

man sed
sed -i '4,+2d' essai

sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr

Hors ligne

#7 Le 17/04/2008, à 15:16

Alain.g

Re : [Résolu] Aide pour script enlevant la ligne "X" dans un fichier

on peut aussi compter le nombre de ligne avec sed :

sed -n '$=' fichier

"s'il y a plus de 9 lignes, supprimer la 4ème" :

[ `sed -n '$=' fichier` -gt  9 ] && sed -i '4d' fichier

autre manière de supprimer de la 4ème à la 6ème ligne (incluse) :

sed -i '4,6d' fichier

Dernière modification par Alain.g (Le 17/04/2008, à 15:24)


Xubuntu Karmic !

Hors ligne

#8 Le 17/04/2008, à 15:44

soupaloignon

Re : [Résolu] Aide pour script enlevant la ligne "X" dans un fichier

best_friend_fr a écrit :
man sed
sed -i '4,+2d' essai

Merci pour l'info. En ce qui concerne le man j'avais cheché avant de poster bien sur, mais rien trouvé. Et j'y suis retourné avec ta commande (avec le +), mais rien trouvé non plus (sed version 4.1.4 )



Alain.g a écrit :

on peut aussi compter le nombre de ligne avec sed :

sed -n '$=' fichier

"s'il y a plus de 9 lignes, supprimer la 4ème" :

[ `sed -n '$=' fichier` -gt  9 ] && sed -i '4d' fichier

autre manière de supprimer de la 4ème à la 6ème ligne (incluse) :

sed -i '4,6d' fichier

Impérial comme à ton habitude Alain-g... wink

Dernière modification par soupaloignon (Le 17/04/2008, à 15:46)


==> Libérez les huitres du bassin d'Arcachon <==

Hors ligne