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

Unix Discussion :

Extraire 02 chaines de caractères pour comparaison


Sujet :

Unix

  1. #1
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 148
    Points : 56
    Points
    56
    Par défaut Extraire 02 chaines de caractères pour comparaison
    Bonjour,

    j'ai un fichier texte d'ou je veux extraire 02 chaines de caractères (commence par des identifiant bien définis), afin de faire un comparaison :

    exemple :

    1ère chaine U02 1500.00
    2ème chaine L24 1500.00

    la taille des deux chaines n'est pas identiques, moi je veux seulement comparer les montants affichés dans les 02 chaines.

    Est ce possible en cmd shell?

    merci.

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    Bonjour arezki,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n '/U02\|L24/s/.* \([0-9]*\.[0-9]*\)$/\1/p' ton_fichier
    ...
    ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 148
    Points : 56
    Points
    56
    Par défaut Extraire 02 chaines de caractères pour comparaison
    Bonjour N_BaH,

    merci pour ta réponse, mais ca ne marche pas, j'ai fait la même cmd sans effet. j'ai rediriger le résulta vers un fichier mais rien.

    Peux tu me dire ce qui ne marche pas?

    merci d'avance.

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    sans un extrait du fichier original, non.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 148
    Points : 56
    Points
    56
    Par défaut Extraire 02 chaines de caractères pour comparaison
    voici un extrait du fichier input :

    AS1
    H011009190521 31819138 770380385 1 VIP Executif 22/02/2010 21/03/2010 22/03/2010 Mars-2010 1
    H02MR HIMRANE HOCINE CITE DES ANASSER II BAT A4 APPARTEMENT N*10 16208 ALGER CUS
    11/04/2010 KOUBA RCE A240000J6CZRO85
    T00 Solde 123.51
    R03
    U03 81.03
    Ly2 468 0 0 465 3 0 0 0 0
    H05 81.03 .00 81.03 13.78 94.81 218.32 223.32 5.00 6000.00 465.00 Y N N N

    B01*10091905210218.31505*1deux cent dix-huit Dinars et trente-deux Centimes
    C02 .00
    R02 .00
    F01Appels vers Djezzy 33.95 00:07:57 4.27
    F01Appels vers autres mobiles 41.95 00:06:08 6.84
    F01Appels vers fixe 5.13 00:01:00 5.13
    U02 81.03
    N4414/02/2010 Solde 23.10
    N0121/02/2010 Facture 29312385 85.82 14.59 100.41
    E01 81.03 13.78 94.81
    D02 .00
    L14 81.03
    G02 .00
    L24 81.03

    Les lignes que je veux comparer sont en rouge; en fait je veux comparer les montants dans ces 2 lignes.

    est ce que c'est possible?

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    si bc est installé sur ton système :
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    valeurs=( $(sed -n '/U02\|L24/s/.* \([0-9]*\.[0-9]*\)/\1/p' ton_fichier) )
    [ $(bc <<<"${vars[0]} == ${vars[1]}") ] && echo "${vars[0]} = ${vars[1]}" || {
       [ $(bc <<<"${vars[0]} > ${vars[1]}") ] && echo "${vars[0]} < ${vars[1]}" ||  echo "${vars[0]} > ${vars[1]}"
    }
    81.03 = 81.03
    sinon ...
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 148
    Points : 56
    Points
    56
    Par défaut Extraire 02 chaines de caractères pour comparaison
    j'ai crée un script sh avec le contenu suivant :

    #!/bin/sh
    . /usr/local/bin/tabsenv

    valeurs=( $(sed -n '/U02\|L24/s/.* \([0-9]*\.[0-9]*\)/\1/p' $1) )
    [ $(bc <<<"${vars[0]} == ${vars[1]}") ] && echo "${vars[0]} = ${vars[1]}" || {
    [ $(bc <<<"${vars[0]} > ${vars[1]}") ] && echo "${vars[0]} < ${vars[1]}" || echo "${vars[0]} > ${vars[1]}"
    }

    j'ai cette erreur :

    Syntax error at line 4 : `(' is not expected.

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    Code sh : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/bin/sh
     
    . /usr/local/bin/tabsenv
    ton_fichier="$1"
    valeurs=$(sed -n '/U02\|L24/s/.* \([0-9]*\.[0-9]*\)/\1/p' $ton_fichier)
    set -- $valeurs
    if [ $(echo "$1 == $2" | bc) ]
    then if [ $(echo "$1 > $2" | bc) ]
         then echo "$2 - $1" | bc
         else echo "$1 - $2" | bc
         fi
    else echo "$1 = $2"
    fi
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 148
    Points : 56
    Points
    56
    Par défaut Extraire 02 chaines de caractères pour comparaison
    est ce que je peux afficher seulement les differences entre U02 et L24?

    merci d'avance.

  10. #10
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    je n'avais pas testé le script, je l'ai corrigé.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. [RegEx] Décomposer une chaine de caractères pour extraire un nombre
    Par PIEPLU dans le forum Langage
    Réponses: 3
    Dernier message: 26/03/2012, 17h30
  2. Découper une chaine de caractère pour un 'IN'
    Par Amiba dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/10/2007, 12h31
  3. extraire une chaine de caractères
    Par nopnop dans le forum C
    Réponses: 11
    Dernier message: 10/04/2007, 17h21
  4. Extraire une chaine de caractéres
    Par fatati dans le forum Oracle
    Réponses: 4
    Dernier message: 30/01/2007, 14h39
  5. result: chaine de caractère pour une DLL
    Par Sephiroth Lune dans le forum Langage
    Réponses: 7
    Dernier message: 27/07/2004, 23h05

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