IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Pourquoi deux commandes sed à la suite ne fonctionnent pas alors qu'individuellement elles fonctionnent ?


Sujet :

Shell et commandes GNU

  1. #41
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonjour,

    Merci pour vos réponses, je vais tester tout cela dans l'après-midi, réinstallation de ma Debian en cours...

    Sinon, je peux sauvegarder toute la sortie de multimonNG dans un fichier puis traiter ce fichier, ça occasionnerait surement moins de problèmes ?

    Merci,
    ZiP

  2. #42
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonjour disedorgue,

    Je viens de tester votre solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     | tee >(sed -r "/^POCSAG1200/{:z;N;/Alpha: /"'!'"bz;s/^.*Address: ([ [:digit:]]{7}).*\n.*Alpha: (.*)$/$(date +'%Y-%m-%d %H:%M:%S');\1;\2/}" >new_fichier) >/dev/null
    Elle ne fonctionne pas comme pour les autres commandes, pas d'erreur, pas d'affichage (là, c'est normal) et surtout un fichier qui reste vide...

    Je vais donc devoir procéder en deux étapes.

    Enregistrer dans un fichier les sorties brutes de multimonNG avec un horodatage au début de chaque ligne puis traiter ce fichier.

    ZiP

  3. #43
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonjour,

    Après de nombreux tests, je me suis rendu compte que la commande awk me permettait d'utiliser ensuite via un pipe la commande tee :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rtl_fm -N -f XXX.XXXM -s 22.05k - | multimonNG -a SCOPE -a POCSAG1200 -f alpha -t raw /dev/stdin | awk '/Address/{ printf "%s %s ", printDate(), $0; } /Alpha/{ print $0;fflush()} function printDate(){ return strftime("%Y-%m-%d %H:%M:%S")}' | tee `date +"%Y-%m-%d_%H-%M-%S"`.txt
    Cette suite de commandes fonctionne, peut-être grâce à fflush().

    Par contre, je n'arrive pas, pour le moment, à reproduire le même résultat qu'avec sed.

    Merci,
    ZiP

  4. #44
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 303
    Points : 12 802
    Points
    12 802
    Par défaut
    En attendant que tu trouves comment faire avec awk ou que quelqu'un t'aide pour le faire. Tu peux essayer en rajoutant l'option -u à sed, peut-être que cela fonctionnera...

  5. #45
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonjour disedorgue,

    Je vais essayer cette option.

    J'avance doucement de mon côté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rtl_fm -N -f XXX.XXXM -s 22.05k - | multimonNG -a SCOPE -a POCSAG1200 -f alpha -t raw /dev/stdin | awk 'match($0, "^POCSAG1200[+-]{1}: Address: ([ [:digit:]]{7})  Function: [[:digit:]]{1}(.*)$", a){printf "%s\t%s\t%s\n", Horaire(), a[1], a[2]; fflush();} function Horaire(){return strftime("%Y-%m-%d %H:%M:%S")}' | tee `date +"%Y-%m-%d_%H-%M-%S"`.txt
    Cette ligne de commandes fonctionne, elle affiche et log les informations.

    Il faut juste que j'arrive à terminer mon expression régulière pour extraire toutes les informations.

    Merci,
    ZiP

  6. #46
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    @disedorgue : votre solution est fonctionnelle avec le paramètre -u de sed !

    Voici donc la commande complète :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rtl_fm -N -f XXX.XXXM -s 22.05k - | multimonNG -a SCOPE -a POCSAG1200 -f alpha -t raw /dev/stdin | sed -u -r "/^POCSAG1200/{:z;N;/Alpha: /"'!'"bz;s/^.*Address: ([ [:digit:]]{7}).*\n.*Alpha: (.*)$/$(date +'%Y-%m-%d %H:%M:%S')\t\1\t\2/}" | tee `date +"%Y-%m-%d_%H-%M-%S"`.txt
    Il y a juste une chose à corriger, c'est que la phrase "Enabled demodulators: POCSAG1200 SCOPE" se retrouve enregistrée dans le fichier.

    Je vais essayer de trouver la modification à faire.

    Sinon, ça fonctionne !

    EDIT :
    Je viens de me rendre compte que l'horodatage de la ligne est toujours le même, c'est l'heure où la commande a été exécutée.

    Merci!!
    ZiP

  7. #47
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 303
    Points : 12 802
    Points
    12 802
    Par défaut
    Utilise la méthode sed de Flodelarab, car comme il passe par la commande s/.../.../e , sa date est toujours recalculée.
    Il est vrai que l'on est tombé dans le piège classique du pipe et des variables, dans un pipe, une variables est évaluée uniquement la première fois puis tout devient static.

  8. #48
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonjour,

    Sur les conseils de disedorgue, j'ai repris la solution proposée par Flodelarab, j'ai apporté quelques petites corrections et voici donc un code qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rtl_fm -N -f XXX.XXXM -s 22.05k -p X - | multimonNG -a SCOPE -a POCSAG1200 -f alpha -t raw /dev/stdin | sed -u '/^POCSAG1200[+-]\{1\}: A/!d' | sed -u '/Address/N;s/POCSAG1200[+-]\{1\}: Address: \([ 0-9]\{7\}\).*POCSAG1200[+-]\{1\}: Alpha: \(.*\)/\1;\2/;h;s/\(.*\)/date +"%Y-%m-%d %H:%M:%S;"/e;G;s/\n//g' | tee `date +"%Y-%m-%d_%H-%M-%S"`.csv
    Merci à toutes les personnes qui ont contribué à cette discussion !

    ZiP

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. [EXE VB6 BATCH] .exe ne fonctionne pas alors que le .vb fonctionne
    Par ellimac60 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 01/07/2013, 10h14
  2. fichier shell qui ne fonctionne pas avec le cron mais fonctionne dans le shell
    Par diabli73 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 20/10/2008, 19h12
  3. Réponses: 2
    Dernier message: 16/10/2008, 10h08
  4. Réponses: 4
    Dernier message: 28/12/2006, 18h42
  5. Réponses: 1
    Dernier message: 17/10/2006, 15h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo