# Comparer 2 fichiers - AWK



## ThiGre (8 Mars 2007)

Bonjour,

J'aimerais pouvoir comparer 2 fichiers. Les données sont en colonnes. Il faudrait créer un nouveau fichier qui contient toutes les lignes du fichiers 1 dont une donnée en colonne 3 se trouve dans le fichier 2.

J'ai pas mal cherché sur le net, j'ai trouvé des solutions avec AWK, mais rien qui fonctionne comme je veux et je n'arrive pas à les modifier pour que cela marche...

Quelqu'un a-t-il une idée ?

Ex

fichier 1:
50/F05 Cloned SPBC11B10.03 pi008; SPACTOKYO_453.28c 1372 20C:T / 551G:A
50/F06 Cloned SPBC713.12  1374 624A:G 0.456  ER; 
50/F07 Cloned SPAPB1A10.07c  1375 #Low sequence quality 0.074  no apparent signal

Fichier 2:
2832888 2832888 SPBC4C3.07
3133105 3133105 SPBC16G5.11c
1175415 1175415 SPBC713.12

Resultat:
50/F06 Cloned SPBC713.12  1374 624A:G 0.456  ER;

SPBC713.12 est commun aux 2 fichiers et donc la ligne qui le contient dans le fichier 1 apparaît dans le fichier résultat.


----------



## bompi (8 Mars 2007)

R&#233;cemment je me suis amus&#233; un peu avec SQLite, c'est sympa.
Donc tu fais un script qui cr&#233;e une base vide, deux tables, puis remplit les tables avec les fichiers. Une bonne petite requ&#234;te SQL plus tard, tu as ton r&#233;sultat.
Apr&#232;s tu peux virer la base.


----------



## ThiGre (8 Mars 2007)

Oui c'est vrai que je peux aussi rechercher de ce cot&#233; l&#224;...

Mais je serais plus int&#233;ress&#233; par une solution en script bash, ce qui me permet d'utiliser mes fichiers sans trop de modifications. Cela dit je ne vais pas faire le difficile


----------



## bompi (8 Mars 2007)

Pas de probl&#232;me, tu &#233;cris un script en BASH et dedans tu utilises la commande _/usr/bin/sqlite3_.
Genre :
	
	



```
/usr/bin/sqlite3 mydb.db <<SQL_QUERY
CREATE TABLE Essai (champ1, champ2);
SQL_QUERY
```


----------



## ThiGre (8 Mars 2007)

Merci de ton aide... En fait j'ai trouvé:

Il suffit d'enchaîner 2 fonctions peu connues d'UNIX ( c'est pas moi qui le dit)

- sort pour trier sur les champs qui vont servir à la comparaison
puis
- join qui permet de comparer les 2 fichiers

Je me doutais bien que c'était simple, mais il faut arriver à trouver la bonne combinaison.

Voici ce que cela donne pour moi sur des fichiers de test:


```
> cat sort_test_Prot.txt sort_test_ORF6.txt ; join -1 2 -2 6 sort_test_Prot.txt sort_test_ORF6.txt
Fichier test1
1175415 SPAC13A11.05
1351676 SPAC21E11.05c
2414596 SPAC22A12.03c
2832888 SPBC4C3.07
3133105 SPBC16G5.11c
3169061 SPCC553.04
3327876
5738526 SPBC17G9.05
5731945 SPAC1952.12c
6491837 SPBC530.06c

Fichier test2
52/E08 Cloned in 2006 trial SPAC27E2.12  405 100% match in both ends  Not determined
52/E07 Cloned in 2006 trial SPAC8C9.19  457 100% match in both ends  Not determined
52/E01 Cloned in 2004 trial SPAC750.06c  901 100% match  "vacuole  cytoplasmic dots"
52/D12 Cloned in 2004 trial SPCC553.04  922 100% match  "cytoplasmic dots  ER" bright dots by over expression
52/E02 Cloned in 2006 trial SPAC57A10.14 sgf11 590 100% match in both ends  Not determined
52/E04 Cloned in 2006 trial SPCC1223.15c spc19 548 100% match in both ends  Not determined

Résultat: 1 match
SPCC553.04 3169061 52/D12 Cloned in 2004 trial 922 100% match "cytoplasmic dots ER" bright dots by over expression
```
Merci en tout cas pour ta participation


----------

