# Question Code shell Unix



## baba915 (7 Septembre 2011)

Je cherche à écrire un programme sur le shell de Linux qui compte le nombre d'identité entre mes 2 séquences:

ABCDEFGHIJKL
    CDEABCIJKL  => 70% d'identité. 

Merci par avance.


----------



## Etoile d'araignee (7 Septembre 2011)

Heuuu 

C'est quoi la question en fait?

J'ai des doutes sur la réponse mais, rassures moi, t'as quand même un bout de début de code? Avec quel langage tu travailles? T'as essayé un peu? Ça donne quoi?

Cdt


----------



## bompi (7 Septembre 2011)

Apparemment, il s'agit de _shell_ donc quelque chose comme _bash_, _ksh_, _zsh_ ou _csh_ ?

En l'espèce, il faut sans doute utiliser les commandes d'UNIX (_sort_, _uniq_ etc.) ou, pourquoi pas, faire un script en _awk_.

Ou alors passer aux langages de scripting un peu plus joli (Perl, Ruby, Python etc.)

On a le choix. Mais il faut commencer par poser le problème de manière précise : qu'est-ce qu'une séquence, comment va-t-on alimenter le script, quelle est la taille de la séquence, y a-t-il des doublons ... ?


----------



## Etoile d'araignee (8 Septembre 2011)

bompi a dit:


> Apparemment, il s'agit de _shell_ donc quelque chose comme _bash_, _ksh_, _zsh_ ou _csh_ ?
> [...]



Sûr  
Mais je tâtais un peu le terrain pour voir d'où il allait falloir commencer l'explication


----------



## edd72 (8 Septembre 2011)

En supposant que ton programme prend 2 paramètres (chaine1 et chaine2). Et en supposant que le %tage de concordance est basée sur la première chaine (si tous les caractères de la première chaine sont présent dans la seconde alors 100%, même si des caractères de la seconde sont en plus). Et en supposant qu'il n'y a pas de caractères en doublon dans la première chaine.

- Tu comptes le nombre de caractères de ta première chaine et établis que chaque caractère vaut x%
- Tu parcours ta première chaine et, pour chaque caractère, tu regarde si présent dans ta seconde (tu t'arrête dès que trouvé). Si trouvé alors tu ajoutes tes x% à ton compteur de %tage.
- Fin

Maintenant, je pars sur des hypothèses qui méritent d'être précisées. Le reste, on peut le faire en très basique avec 2 boucles for imbriquées dans un script shell.


----------



## baba915 (8 Septembre 2011)

Merci,

oui il s'agit de trouver une commande ou de faire un script en shell bash afin de comparer deux fichiers. L'idée est de déterminer le taux de ressemblance entre 2 lignes.

ABCDEFGHIJKL
....CDEABCIJKL  (les . sont des trous) et on doit trouver 70% de ressemblance.

Du coup j'ai essayer avec diff et wc, mais impossible en script...

Merci pour votre aide.


----------



## edd72 (8 Septembre 2011)

Dans ton cours, tu as quelque chose sur sed et awk?


----------



## baba915 (8 Septembre 2011)

j'ai vu des choses sur le net concernant awk...Cependant on a pas eu de cours d'ou la grosse difficulté.
Je pense qu'il y a plusieurs pistes... mais après je ne sais pas laquelle prendre


----------



## edd72 (9 Septembre 2011)

Si tu n'as pas eu de cours spécifique à des commandes "évoluées", fait un script basique (lecture des caractères, comparaison de chaque caractère lu).


----------



## baba915 (9 Septembre 2011)

D'accord merci beaucoup en tout cas.

Tu penses qu'en trouvant sur internet comment faire un script je vais y arriver facilement ?
Selon toi quelle  stratégie devrais-je adopter dans le script ?

Merci encore.


----------



## baba915 (10 Septembre 2011)

Je pensais appliquer les instructions if et while, mais ça ne marche pas il ne veut pas identifier les lettre...il me met +1 partout.

---------- Nouveau message ajouté à 10h36 ---------- Le message précédent a été envoyé à 10h23 ----------

Voici, mais je n'arrive pas à corriger mes erreurs:

i=CDEABCIJKL;
while ((i = c'est là ou j'ai l'erreur: je voudrais dire de A à L));
do;
echo i;
((+1...je ne sais pas si ca marche ça));
done

Merci encore


----------

