#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