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 24/03/2020, à 11:36

judkil

AWK_utilliisation de substr

Bonjour !

  (FNR==NR){molecule=substr($1,1,10) 

Avec substr($1,1, 10), la longueur de mes motifs est limitée à une longueur de 10 caractères.
Cependant, j'ai une liste de motifs de tailles différentes. J'aimerai savoir que mettre dans substr pour qu'il prenne un motif de taille quelconque ?

Merci beaucoup !

Hors ligne

#2 Le 24/03/2020, à 11:53

pingouinux

Re : AWK_utilliisation de substr

Bonjour,
Il suffit de na pas donner la taille max

  (FNR==NR){molecule=substr($1,1) 

Hors ligne

#3 Le 27/03/2020, à 11:33

judkil

Re : AWK_utilliisation de substr

Bonjour, si je ne lui donne pas de troisieme argument cela me renvois un messafe d'erreur. Finalement je suis passée par un split :

awk '
(FNR==NR){ split($0,a,"-")
           molecule=a[1] "-" a[2]
           molecule2=a[1]
           n[molecule]++
           n[molecule2]++
           ligne[molecule,n[molecule]]=$0
           ligne[molecule2,n[molecule2]]=$0
           next }
           {for (i=1;i<=n[$1];i++)
              print $1,ligne[$1,i]
   }' temp1 temp2 > temp3

Hors ligne

#4 Le 27/03/2020, à 13:01

pingouinux

Re : AWK_utilliisation de substr

si je ne lui donne pas de troisieme argument cela me renvois un messafe d'erreur.

Quelle ligne de commande et quel message ?
Parce que normalement ça fonctionne.

$ awk '{print substr($1,2)}' <<<"abcdefghi"
bcdefghi

Hors ligne

#5 Le 27/03/2020, à 16:19

judkil

Re : AWK_utilliisation de substr

Voila le input_1

AB-00050832
AB-00058394
AB-00050862
AB-00004123
VH3
AB-00050832-18     1    -8.900758
AB-00058394-10     2    -7.981418
AB-00050832-24     3    -7.634420
AB-00050862-10     4    -7.621671
AB-00004123-1      5    -7.386272
AB-00058394-6      6    -7.383604
AB-00050832-12    14    -7.038594
AB-00050862-6     50    -6.701126 
VH3-1             33   -10.701126 

Voila le output

AB-00050832     AB-00050832-18     1    -8.900758
AB-00050832     AB-00050832-24     3    -7.634420
AB-00050832     AB-00050832-12    14    -7.038594
AB-00058394     AB-00058394-10     2    -7.981418
AB-00058394     AB-00058394-6      6    -7.383604
AB-00050862     AB-00050862-10     4    -7.621671
AB-00050862     AB-00050862-6     50    -6.701126
AB-00004123     AB-00004123-1      5    -7.386272
VH3             VH3-1             33   -10.701126

Voila le code initial

awk '
(FNR==NR){ molecule=substr($1,1,11) 
           n[molecule]++
           ligne[molecule,n[molecule]]=0
           next }
           {for (i=1;i<=n[$1];i++)
              print $1,ligne[$1,i]
   }' input_2 input_1 > output

Il s'agissait d'effectuer une jointure. Le probleme est que ce code ne prennait pas en compte les noms de petite taille de type VH3. Le code peut présenter des erreurs, car comme je l'ai modifié je n'ai plus l'ancien.

Dernière modification par judkil (Le 27/03/2020, à 16:23)

Hors ligne