Extraire une différence entre 2 chaines

Résolu
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. Contributeur
    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. bien sûr, il faut lire:
      $ readarray t < <(echo $a $b | tr ' ' '\n' | sort | uniq -u)
    2. Contributeur
      non, mais les 2 fonctionnent
    3. @dubcekc'est pas parce que «ça fonctionne» que c'est correct, à préconiser, ou défendable.

      - - -
      tous coupables, à l'échafaud !
      XD
    4. Contributeur
      ça va les chevilles ?
      PS: on attend de lire ta proposition
    5. @dubcek
      $ 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.
  2. 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.
    1. 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