Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 15/10/2008, à 16:59

mezhoud

[résolu]Bioinformatic-concaténation texte-table

Bonjour Je souhaiterais bien extraire des données de deux fichiers qui ont les formes suivantes



fichier 1:
Query= gi|15805043|ref|NP_293727.1| DNA polymerase III, beta subunit           
dip:DIP-13110N|refseq:NP_214516|uniprot:Q50790                        129   8e-30     
Query= gi|15805044|ref|NP_293728.1| chromosomal replication initiator                   
dip:DIP-41940N|uniprot:P05648                                         364   e-100

Il y a des retours chariots à la fin de chaque ligne.
les lignes sont couplées en deux Query+dip.


fichier2:
Composé d'une table de 11 colonnes espacées par une ou plusieurs tabulation
A la fin de chaque ligne il y a des retour chariot. voici un exemple:
ligne1-  DIP-1E    DIP-328N    Q07817    NP_612815        DIP-232N    Q07812            3    DIP-110851X:SS    DIP-1X:SS    DIP-93495X:SS   


ligne2-  DIP-2E    DIP-1043N    P10415    NP_000624        DIP-1048N    P04049    NP_002871        3    DIP-108783X:HT    DIP-76062X:SS    DIP-2X:SS           


But:
Récupérer du fichier 1:  gi|15805043 (ligne1 fichier1) avec DIP-13110N (ligne2 fichier1)

apparié DIP-13110N dans la table du fichier 2.

et mettre le tout cad :
gi|15805043-DIP-13110N
la ligne de la table qui contient la chaine de caractère DIP-13110N

dans un 3ème fichier.

Est il comprehensible.

Merci pour votre aide
cordialement vôtre

Dernière modification par mezhoud (Le 20/10/2008, à 21:14)

Hors ligne

#2 Le 16/10/2008, à 19:34

mezhoud

Re : [résolu]Bioinformatic-concaténation texte-table

Bonjour

M. Totor au secours

Hors ligne

#3 Le 17/10/2008, à 20:24

Totor

Re : [résolu]Bioinformatic-concaténation texte-table

Bonsoir,

désolé mais j'ai une tonne de TAF en ce moment...
Je suis très peu sur le forum.

En considérant que fichier1 est constitué uniquement des lignes commençant par Query et dip:
voici un script :

#!/bin/bash

fichier1="fichier1"
fichier2="fichier2"
fichier3="fichier3"

[[ -f "${fichier3}" ]] && rm "${fichier3}"

while read ligne
do
	
	if [ "${ligne}" =~ "^Query" ]; then
		entete=$(echo "${ligne}"|sed 's/^Query=//'|awk -F\| '{ print $1"\|"$2 }')
	fi

	if [ "${ligne}" =~ "^dip:" ]; then
		cle=$(echo "${ligne}"|sed 's/dip://'|awk -F\| '{ print $1 }')
		echo "${entete}-${cle}" >> ${fichier3}
		grep "$cle" ${fichier2} >> ${fichier3}
	fi
done < ${fichier1}

Dernière modification par Totor (Le 17/10/2008, à 20:32)


-- Lucid Lynx --

Hors ligne

#4 Le 18/10/2008, à 16:49

mezhoud

Re : [résolu]Bioinformatic-concaténation texte-table

Bonjour,

Merci beaucoup pour votre aide.

Comment exécuter une commande sur deux fichiers? ./cammande fichier1 fichier2?

J'ai rénommé mes fichiers "fichiers1" et "fichier2" ensuite j'ai exécuté le script sur le fichier 1 ensuite 2.

Le message d'erreur est le suivant:

"./cancatenation-chaine-caractere: line 22: fichier1: Aucun fichier ou répertoire de ce type"

La ligne 22 c'est la dernière ligne.




Dans le script je n'ai pas remarqué que la recherche doit sélectionner dans la ligne qui comence par Query, gi| et les 8 caractères qui suits dans la ligne qui commence par dip, DIP- et les 6 caractères qui suits.

merci beaucoup

Hors ligne

#5 Le 18/10/2008, à 17:30

mezhoud

Re : [résolu]Bioinformatic-concaténation texte-table

Voici le script en Français.

on pourra séparer le travail en deux exercices:
le premier consiste à extraire du fichier 1 les deux chaine de caractères et les mettre dans un fichier3:
chercher dans un fichier1,
Si la ligne commence par Query, extraire gi|et les 8 caractères qui suits,
Si la ligne qui SUIT commence par dip, extraire DIP- et les 6 caractères qui suits,
cancaténer les deux résultats "gi|xxxxxxxx-DIP-xxxxxx " dans un fichier3 avec un retour chariot entre les résultat

exercice 2:

apparier gi|xxxxxxxx-DIP-xxxxxx avec le fichier2, si tu détecte un ligne contenant DIP-xxxxxx mettre dans un fichier4 le résultat comme suite:
gi|xxxxxxxx-DIP-xxxxxx retour chariot
ligne contenant DIP-xxxxxx retour chariot


Merci d'avance

Hors ligne

#6 Le 20/10/2008, à 21:13

mezhoud

Re : [résolu]Bioinformatic-concaténation texte-table

Voici la solution postulée par Totor:

#!/bin/bash

fichier1="$1"
fichier2="$2"
fichier3="$3"

[[ -f "${fichier3}" ]] && rm "${fichier3}"

cat ${fichier1}|while read ligne
do
    
    if [ -n "$(echo "${ligne}"|grep "Query")" ]; then
        entete=$(echo "${ligne}"|sed 's/Query=[ ]\{0,1\}//'|awk -F\| '{ print $1"|"$2 }')
    else
    if [ -n "$(echo "${ligne}"|grep "^dip:")" ]; then
        cle=$(echo "${ligne}"|sed 's/dip://'|awk -F\| '{ print $1 }')
        echo "${entete}-${cle}" >> ${fichier3}
        grep "$cle" ${fichier2} >> ${fichier3}
    fi
    fi
done

un grand merci

Hors ligne