IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Modification de données sous conditions


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2020
    Messages : 16
    Par défaut Modification de données sous conditions
    Bonjour à tous,
    Depuis quelques temps je suis à la recherche d'une solution pour modifier une partie de mes données brutes en vain.
    Voici mes données brutes: en première colonne le nom des chromosomes, en 2eme la position physique, en 3eme l'identifiant unique de ma ligne, en 6eme une codification à utiliser, en 7eme ma colonne à modifier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CHROM	POS	ID	REF	ALT	IUPAC	CONTEXT
    1	144	1_144	C	A	M	CAAATAATGATCAAATAAATTTAAAAAGCAATTTTACTCAATATTGTTTTAGCGTGTTAAGAATTATTTTTTAACTTCTTTTTGAATATTTGAAGGCATA[C/A]CATGTGAAACCTCAATTTTTAGCCATTCCNAACATACAAGTCAAATATTAGCCCATTTTAAAACTTCAATTTTCAGCTCGAAATTTGTCGATTTTCAAAG
    1	174	1_174	C	A,T	H	ATTTTACTCAATATTGTTTTAGCGTGTTAAGAATTATTTTTTAACTTCTTTTTGAATATTTGAAGGCATANCATGTGAAACCTCAATTTTTAGCCATTCC[C/A]AACATACAAGTCAAATATTAGCCCATTTTAAAACTTCAATTTTCAGCTCGAAATTTGTCGATTTTCAAAGGGGTTAACCTATGGAAAGGAGTCATTTTGA
    1	303	1_303	G	C	S	TAAAACTTCAATTTTCAGCTCGAAATTTGTCGATTTTCAAAGGGGTTAACCTATGGAAAGGAGTCATTTTGACATGAAAATTTCAAAATTTGGAAACCGG[G/C]TAATATTTGACATTCATGTTTTGAATGGCTAAAAGTGAAGTTTCATTACGGCAACCCCTGCAAATAATGATCAAATAAATTTAAAAATCAATTCTACTCA
    1	442	1_442	T	A	W	AGTTTCATTACGGCAACCCCTGCAAATAATGATCAAATAAATTTAAAAATCAATTCTACTCAATATTGTTTTAGCGTGTTAAGAATTATTTTTTAACTTC[T/A]TTTTGAATATTTGAAGGCATACCATGGTGAACCTCAATTTTTAGCCATTCCCCATGGTGAAACCTCAATTTTTAGTCATTCCCAACATACAAGTCAAATA
    Objectif: dans cet exemple, la ligne contenant le 1_144 possède à droite du [C/A] dans la colonne N°7 un "N" à 30 bases plus loin correspondant à la base de la ligne suivante nommée 1_174 car les séquence distance de moins de 100 unités sont chevauchantes. Et inversement, dans la ligne contenant le 1_174, on retrouve à gauche du [C/A] un "N" à -30 bases de la ligne précédente nommée 1_144. Il faudrait pour la ligne 1_144 remplacer le "N" par "H" pris dans la ligne 1_174 et pour la ligne 1_174 remplacer le "N" par "M" pris dans la ligne 1_144. Cela est vrai uniquement si la distance entre les lignes est inférieur à 100 unités. Au dela nous avons pas de recouvrement de séquence et donc pas de modification à opérer.
    Résultats souhaité:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CHROM	POS	ID	REF	ALT	IUPAC	CONTEXT
    1	144	1_144	C	A	M	CAAATAATGATCAAATAAATTTAAAAAGCAATTTTACTCAATATTGTTTTAGCGTGTTAAGAATTATTTTTTAACTTCTTTTTGAATATTTGAAGGCATA[C/A]CATGTGAAACCTCAATTTTTAGCCATTCCHAACATACAAGTCAAATATTAGCCCATTTTAAAACTTCAATTTTCAGCTCGAAATTTGTCGATTTTCAAAG
    1	174	1_174	C	A,T	H	ATTTTACTCAATATTGTTTTAGCGTGTTAAGAATTATTTTTTAACTTCTTTTTGAATATTTGAAGGCATAMCATGTGAAACCTCAATTTTTAGCCATTCC[C/A]AACATACAAGTCAAATATTAGCCCATTTTAAAACTTCAATTTTCAGCTCGAAATTTGTCGATTTTCAAAGGGGTTAACCTATGGAAAGGAGTCATTTTGA
    1	303	1_303	G	C	S	TAAAACTTCAATTTTCAGCTCGAAATTTGTCGATTTTCAAAGGGGTTAACCTATGGAAAGGAGTCATTTTGACATGAAAATTTCAAAATTTGGAAACCGG[G/C]TAATATTTGACATTCATGTTTTGAATGGCTAAAAGTGAAGTTTCATTACGGCAACCCCTGCAAATAATGATCAAATAAATTTAAAAATCAATTCTACTCA
    1	442	1_442	T	A	W	AGTTTCATTACGGCAACCCCTGCAAATAATGATCAAATAAATTTAAAAATCAATTCTACTCAATATTGTTTTAGCGTGTTAAGAATTATTTTTTAACTTC[T/A]TTTTGAATATTTGAAGGCATACCATGGTGAACCTCAATTTTTAGCCATTCCCCATGGTGAAACCTCAATTTTTAGTCATTCCCAACATACAAGTCAAATA
    Attention: il se peut qu'il y ait plusieurs "N" dans les séquences à gauche et a droite de [./.], mais il faut prendre spécifiquement le bon, a savoir si la distance 174-144 =30, alors on ne doit modifier que le N à +30, et inversement à -30 pour l'autre ligne.
    Merci de votre aide !
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Bonjour

    Ton algorithme étant si clair, la seule question qui reste est : pourquoi ne le fais-tu pas ?
    Avec awk, le deuxième champ est désigné par $2 et le septième par $7; tu peux alors chercher les indices de tes expressions ([C/A], N, etc) avec la commande find( ).Et remplacer par le 6ème champ, $6, si un critère est vérifié.

    Bonne chance !

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    find() ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2020
    Messages : 16
    Par défaut
    Bonjour,
    Mon soucis principal est d'avoir un compteur de caractère à partir de ma requète [./.] pour aller piocher dans la bonne ligne et la colonne d'interet IUPAC …
    Merci :-)

  5. #5
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Pardon. L'intitulé exact est index().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    index(in, find)
     
        Search the string in for the first occurrence of the string find, and return the position in characters where that occurrence begins in the string in. Consider the following example:
     
        $ awk 'BEGIN { print index("peanut", "an") }'
        -| 3
     
        If find is not found, index() returns zero.
     
        With BWK awk and gawk, it is a fatal error to use a regexp constant for find. Other implementations allow it, simply treating the regexp constant as an expression meaning ‘$0 ~ /regexp/’. (d.c.)
    "return the position in characters" veut dire qu'il compte les caractères.

    Source :
    https://www.gnu.org/software/gawk/ma...Functions.html

  6. #6
    Membre émérite Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 348
    Par défaut
    C'est un cas particulier que le nombre de bases à gauche et à droite de [./.] soit égal à 100 ?
    Parce que si c'est toujours le cas, il n'y a pas besoin de compter…
    Mais peut-être que je ne comprends pas tout dans cette histoire

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. selection et écriture de données sous condition avec boucle
    Par braquin dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 25/08/2011, 09h16
  2. récupérer des données sous conditions
    Par Lost_in_VBA dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 19/07/2011, 14h11
  3. Copier des données sous condition
    Par delphine1987 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/04/2011, 22h17
  4. [XL-2007] D'un classeur, récupérer des données sous condition
    Par SenseniX dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 25/06/2010, 10h58
  5. [XL-2007] Récupérer des données sous conditions
    Par christophe31 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/05/2010, 15h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo