Extraire une différence entre 2 chaines

[Résolu/Fermé]
Signaler
-
 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

Messages postés
18260
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
20 septembre 2021
5 370
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 42674 internautes nous ont dit merci ce mois-ci

Utilisateur anonyme
bien sûr, il faut lire:
$ readarray t < <(echo $a $b | tr ' ' '\n' | sort | uniq -u)
Messages postés
18260
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
20 septembre 2021
5 370
non, mais les 2 fonctionnent
Utilisateur anonyme >
Messages postés
18260
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
20 septembre 2021

c'est pas parce que «ça fonctionne» que c'est correct, à préconiser, ou défendable.

- - -
tous coupables, à l'échafaud !
XD
Messages postés
18260
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
20 septembre 2021
5 370
ça va les chevilles ?
PS: on attend de lire ta proposition
Utilisateur anonyme >
Messages postés
18260
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
20 septembre 2021

$ 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.

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.
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