Comparer 2 fichiers - AWK

  • Créateur du sujet Créateur du sujet ThiGre
  • Date de début Date de début

ThiGre

Membre actif
11 Mars 2005
226
16
Grenoble
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.
 
Récemment je me suis amusé un peu avec SQLite, c'est sympa.
Donc tu fais un script qui crée une base vide, deux tables, puis remplit les tables avec les fichiers. Une bonne petite requête SQL plus tard, tu as ton résultat.
Après tu peux virer la base.
 
Oui c'est vrai que je peux aussi rechercher de ce coté là...

Mais je serais plus intéressé 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 :D
 
Pas de problème, tu écris un script en BASH et dedans tu utilises la commande /usr/bin/sqlite3.
Genre :
Bloc de code:
/usr/bin/sqlite3 mydb.db <<SQL_QUERY
CREATE TABLE Essai (champ1, champ2);
SQL_QUERY
 
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:

Bloc de code:
> 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