#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
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
sed -i '4d' fichier
marche chez moi
Et chez moi aussi . 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
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 )
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...
Dernière modification par soupaloignon (Le 17/04/2008, à 15:46)
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne