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 10/01/2018, à 10:18

BenjiBoy

Supprimer les X dernières ligne d'un fichier texte généré d'un wget.

Bonjour à tous,

avec un wget je récupère des fichiers textes d'un appareil de mesure à distance.
Voilà une explication de contexte :

Mon appareil de mesure enregistre les valeurs toutes les minutes, puis incrémente un fichier intégré dans l'appareil (un fichier unique).
Mon programme lit le fichier de cet appareil puis créé un fichier texte sur mon serveur local, censé correspondre à un jour de mesure, soit environ 3600 lignes (sans compter les headers).
Parfois la qualité de télécommunication n'est pas bonne et l’appareil est injoignable (c'est une liaison 3G), il faut que le programme puisse rattraper ces retards.
Pour ce faire mon programme, avant de lire l'appareil, regarde en local sur mon serveur le dernier fichier texte dispo, prend le dernier "record number" en bout de fichier, il ajoute 1 et part de cet enregistrement.

Tout ça marchait très bien, mais depuis peu et j'ignore pourquoi, à chaque téléchargement il se glisse dans le fichier texte quelques lignes en bout de mesure, exemple :

"2018-01-09 22:43:00",233851,13.58,13.58
"2018-01-09 22:44:00",233852,13.59,13.59
"2018-01-09 22:45:00",233853,13.58,13.58

0

(c'est un tail -10 du fichier texte généré à partir de l'appareil, on voit les trois dernières mesures puis des trucs en plus)
Comme vous le voyez il rajoute des retours chariot et un fucking "0". Du coup mon programme qui regarde la dernière ligne voit du vent, et re-télécharge l'intégralité des mesures dispo sur l'appareil. Ce qui surcharge la bande passante de mon routeur sur site.

Je pensais rajouter un sed dans mon programme pour effacer les 3 dernière lignes, mais je n'ai jamais utilisé cette commande et je n'ai pas l'impression qu'on puisse, relativement simplement, supprimer les X dernières lignes ?

Avez-vous des suggestions ?


Ah petite précision pour les "carrés du code" (pour qui j'ai le plus grand respect) : oui, dans l'absolu il faudrait que je comprenne pourquoi ces trucs se sont rajoutés nous sommes d'accord, mais en toute honnêteté, il y a tellement d'interface incriminable entre moi et l'appareil que je n'ai pas le temps de faire un diagnostic complet (version de soft, de firmware, liaison, connexion physique, ...).


a+

Hors ligne

#2 Le 10/01/2018, à 10:25

Watael

Re : Supprimer les X dernières ligne d'un fichier texte généré d'un wget.

salut,

oui, on est d'accord.

avec sed, tu pourrais "delete" les lignes qui ne correspondent pas aux motifs des en-têtes, et des données (que tu veux conserver !).

c'est aléatoire, ce comportement ?
parce que supprimer systématiquement les N dernières lignes pourrait te priver de certaines données.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 10/01/2018, à 10:28

pingouinux

Re : Supprimer les X dernières ligne d'un fichier texte généré d'un wget.

Bonjour,
Pour supprimer les 3 dernières lignes du fichier

head -n -3 fichier

Mais, comme le dit Watael, il faut être sûr de ton coup.

Hors ligne

#4 Le 10/01/2018, à 10:53

BenjiBoy

Re : Supprimer les X dernières ligne d'un fichier texte généré d'un wget.

Est-ce que c'est aléatoire, ça c'est une très bonne question !

Mais en fait, ça n'est pas trop grave parce que les lignes seraient supprimées sur le fichier texte généré en local, du coup le prochain téléchargement lirait la dernière ligne sur le fichier local avant de lancer le téléchargement à partir de cette ligne là sur l'appareil : en gros les ligne sur l'appareil ne seront pas touché (parce qu'en effet là ça serait grave).
Donc normalement, ça ne perdrait pas de ligne.
Et même si, c'est vrai, c'est moche tongue.

Ceci dit, si je me satisfait d'un truc si laid, c'est parce que je suis en train de faire un autre programme (en langage de prog spécifique au numériseur sur site) qui devrait pousser les données en FTP lorsque la liaison est OK.
Cette solution de wget est un reliquat de mon passé ! Mais ça fera l'affaire le temps que je développe l'autre programme.

Ok je vais testé cette commande "head -n -3 fichier".

Hors ligne

#5 Le 10/01/2018, à 11:08

BenjiBoy

Re : Supprimer les X dernières ligne d'un fichier texte généré d'un wget.

Ah, intéressant.
Parce que je regardais que les fin de fichier, je croyais que ce n'était qu'en fin de fichier.
Mais non ! Bon sang, ça pullule dans tout le fichier. Et j'ai envie de dire ça m'fichier.

Signes très étranges :

"2018-01-08 21:26:00",232334,13.58,13.58
"2018
175
-01-08 21:27:00",232335,13.58,13.58
[...]
"2018-01-08 21:35:00",232343,13.59,13.59

5a5
"2018-01-08 21:36:00",232344,13.59,13.59
[...]
"2018-01-08 22:10:00",232
5a5
378,13.58,13.58

Ca me rappelle quelque chose. Un problème de variable d'environnement je crois. Parce qu'il n'y a que le crontab qui génère ces signes, en manuel sur le serveur aucun problème, sur mon PC en local, aucun problème.

Hors ligne

#6 Le 10/01/2018, à 11:42

credenhill

Re : Supprimer les X dernières ligne d'un fichier texte généré d'un wget.

BenjiBoy a écrit :

...
Ca me rappelle quelque chose....

là ?  https://forum.ubuntu-fr.org/viewtopic.php?id=2010881

Hors ligne

#7 Le 10/01/2018, à 14:31

BenjiBoy

Re : Supprimer les X dernières ligne d'un fichier texte généré d'un wget.

Non pas ce topic là, c'était un autre aussi sur le même appareil de mesure mais au debut de mon programme (temporaire).
Bref, je crois que je vais plancher un bon coup sur mon FTP push en prog sur l'appareil directement, histoire de plus avoir à bricoler ce code complètement "inoptimisé" ...

Ceci étant dit et histoire que ce topic puisse servir à quelque chose dans l'avenir d'un autre usager qui se poserait la question qui sert de titre :
La commande head -n -3 fichier.txt sort effectivement le fichier moins les trois lignes, mais l'affiche uniquement dans la console, le fichier.txt lui demeure inchangé.
Faudrait-il rajouter ">" pour remplacer le fichier ? Ca se fait ça ?

Hors ligne

#8 Le 10/01/2018, à 14:41

Watael

Re : Supprimer les X dernières ligne d'un fichier texte généré d'un wget.

Faudrait-il rajouter ">" pour remplacer le fichier ? Ca se fait ça ?

non. il faut
soit utiliser un fichier temporaire, qui sera renommé pour remplacer l'original
soit connecter la sortie de wget par un pipe (|) à l'entrée de head ET rediriger (>) vers un fichier.

parce que la redirection est réalisée avant toute autre chose, ce qui a pour effet d'écraser le fichier.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#9 Le 10/01/2018, à 15:41

BenjiBoy

Re : Supprimer les X dernières ligne d'un fichier texte généré d'un wget.

Watael a écrit :

    Faudrait-il rajouter ">" pour remplacer le fichier ? Ca se fait ça ?

non. il faut
soit utiliser un fichier temporaire, qui sera renommé pour remplacer l'original
soit connecter la sortie de wget par un pipe (|) à l'entrée de head ET rediriger (>) vers un fichier.

parce que la redirection est réalisée avant toute autre chose, ce qui a pour effet d'écraser le fichier.

Woui, je confirme, ça écrase le fichier yikes
(j'ai pas été assez patient)

Hors ligne

#10 Le 11/01/2018, à 13:37

credenhill

Re : Supprimer les X dernières ligne d'un fichier texte généré d'un wget.

BenjiBoy a écrit :

Non pas ce topic là, c'était un autre ...

https://forum.ubuntu-fr.org/viewtopic.php?id=1898661

Hors ligne