Extraire une différence entre 2 chaines

Résolu
sergio -  
 Utilisateur anonyme -
Bonjour,

J'ai 2 chaines de caractères dans 2 variables
J'aimerai en extraire la différence, comment puis-je faire ?
exemple
a="abc de fgh"
b="abc zz fgh"
je cherche a avoir "de" dans une variable c
et "zz" dans une variable d
quelqu'un a t-il une idée ?

3 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    hello
    $ a="abc de fgh"; b="abc zz fgh" 
    $ readarray t <<<"$(echo $a $b | tr ' ' '\n' | sort | uniq -u)"
    $ echo ${t[0]}
    de
    $ echo ${t[1]}
    zz
    1
    1. Utilisateur anonyme
       
      bien sûr, il faut lire:
      $ readarray t < <(echo $a $b | tr ' ' '\n' | sort | uniq -u)
      0
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      non, mais les 2 fonctionnent
      0
      1. Utilisateur anonyme > dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention  
         
        c'est pas parce que «ça fonctionne» que c'est correct, à préconiser, ou défendable.

        - - -
        tous coupables, à l'échafaud !
        XD
        0
    3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      ça va les chevilles ?
      PS: on attend de lire ta proposition
      0
      1. Utilisateur anonyme > dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention  
         
        $ a="abc de fgh" b="abc zz fgh"
        $ a_t=( $a ) b_t=( $b )
        $ for i in ${!a_t[@]}; do x=${a_t[i]} y=${b_t[i]}; test "$x" = "$y" || d=( "$x" "$y" ); done
        $ printf '%s\n' "${d[@]}"
        de
        zz


        d'ailleurs, outre le "pléonasme", ta solution pourrait ne pas relever des différences quand des valeurs sont interverties.
        0
  2. Utilisateur anonyme
     
    salut,

    avec quel shell comptes-tu faire ça ?
    en POSIX sh, ça va être coton.

    en bash, j'utiliserais des tableaux, pour pouvoir parcourir leurs éléments, et ainsi les comparer.

    avec awk, je ferais pareil.
    0
  3. sergio
     
    trés bien.
    je n'avais jamais remarqué l'utilité du uniq -u, bien que j'utilisais souvant le sort -u.
    Merci pour votre contribution
    SErge
    0