#1 Le 18/05/2017, à 17:42
- grraougrraou
[RESOLU] extraire et compter à partir de plusieurs fichiers
Bonjour a tous
Ca fait quelques temps que je me casse la tête sur ce probleme.
Voila j'ai plusieurs fichiers (1.res, 2.res, 3.res...) qui sont tous du meme type :
========== spectrum 1 restraint 147 ==========
set-i-atoms
A 82 GLY HN
set-j-atoms
A 80 ARG HB2
R<average>= 5.022 NOE= 3.21 (- 1.29/+ 1.29) Delta= -0.518 E(NOE)= 0.269
========== spectrum 1 restraint 219 ==========
set-i-atoms
B 94 LYS HB2
set-j-atoms
B 94 LYS HD1
B 94 LYS HD2
R<average>= 3.205 NOE= 2.25 (- 0.63/+ 0.63) Delta= -0.329 E(NOE)= 0.108
et ce que voudrais obtenir c'est quelque chose de la forme :
82(HN)/80(HB2) 2 1 -0,518 2 0,302
94(HN)/91(HA) 1 1 -0.329
c'est a dire a gauche le 2eme et le 4eme champ de la ligne qui suit set i-atom suivi de la meme chose pour j-atom
puis le nombre d'occurrence ou ces termes apparaissent (c'est à dire que si on les retrouve dans 2 fichiers .res, on doit avoir le chiffre 2) puis le numero des fichiers ou ils apparaissent avec ce qui suit "Delta=" (le 9eme champ de la ligne commencant par R<average>=)
suis je claire?
j'ai ecrit ca :
BEGIN {n = 1; m = 1; OFS = "\t" }
/set-i-atoms/ {n = NR}
NR == n + 1 {i = $2; k = $4}
/set-j-atoms/ {m = NR}
NR == m + 1 {j = $2; l = $4}
/R<ave/ {r = $9 ;\
c = ++count[i "(" k ")" "/" j "(" l ")"] ; \
num[i "(" k ")" "/" j "(" l ")" ":" c] = substr(FILENAME,4,3) ; \
delta[ijkl] = r }
END {for (ijkl in count)
{
print "\n"
ORS = "\t"
print ijkl " ", count[ijkl]
for ( ic = 1; ic <= count[ijkl]; ic++)
{
ORS = " "
print num[ijkl ":" ic] , delta[ijkl]
}
}
}
mais il ne m'ecrit que le dernier delta de chaque fichier :
82(HN)/80(HB2) 2 1 -0.329 2 -0.329
94(HN)/91(HA) 1 1 -0.329
merci de votre aide.
Modération : merci à l'avenir d'utiliser les balises code (explications ici).
Dernière modification par grraougrraou (Le 19/05/2017, à 14:45)
Hors ligne
#2 Le 18/05/2017, à 18:46
- pingouinux
Re : [RESOLU] extraire et compter à partir de plusieurs fichiers
Bonsoir,
C'est bien confus ton histoire. Tu devrais montrer des données et des résultats qui se correspondent, et utiliser des balises-code <>.
Dans cette instruction, la variable ijkl n'est pas définie, et de toute façon on ne récupère que le r du dernier fichier traité :
/R<ave/ {r = $9 ;\
c = ++count[i "(" k ")" "/" j "(" l ")"] ; \
num[i "(" k ")" "/" j "(" l ")" ":" c] = substr(FILENAME,4,3) ; \
delta[ijkl] = r }
Hors ligne
#3 Le 19/05/2017, à 10:30
- grraougrraou
Re : [RESOLU] extraire et compter à partir de plusieurs fichiers
Désolée de ne pas avoir ete claire, je ne connaissais pas les balises codes….
en fait, au depart j'avais un script qui me donnait moins de renseignements (mais qui marchait) et j'ai voulu l'ameliorer, mais ca ne marche plus....
je peux peut etre joindre les fichiers a partir desquels je travaille et le fichier que j'obtiens (comme ils sont longs, je ne voulais pas les mettre en entier)
Hors ligne
#4 Le 19/05/2017, à 10:37
- grraougrraou
Re : [RESOLU] extraire et compter à partir de plusieurs fichiers
j'avais ce code :
BEGIN {n = 1; m = 1; OFS = "\t" }
{b = index(FILENAME,"noe") ; d = b - 3}
/set-i-atoms/ {n = NR}
NR == n + 1 {i = $2; k = $4}
/set-j-atoms/ {m = NR}
NR == m + 1 {j = $2; l = $4; c = ++count[i "(" k ")" "/" j "(" l ")"] ; \
num[i "(" k ")" "/" j "(" l ")" ":" c] = substr(FILENAME,4,3)}
END {for (ij in count)
{
print "\n"
ORS = "\t"
print ij " ", count[ij]
for ( ic = 1; ic <= count[ij]; ic++)
{
ORS = " "
print num[ij ":" ic]
}
}
}
a partir des fichiers : noe6.res
X-PLOR>print threshold= 0.2 noe
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++ CLASS COMP +++++++++++++++++++++++++++++++++++
for this class: SCALe= 1.000 AVERage=sum POTEntial=soft-square
SQCOnstant= 1.000 SQEXponent= 2 SQOFfsets(+/-)= 0.000 0.000
SOEXponent= 1 RSWItch= 1.000 ASYMptote= 2.000
========== spectrum 1 restraint 73 ==========
set-i-atoms
A 77 ARG HN
set-j-atoms
A 76 CYS HA
R<average>= 3.289 NOE= 2.38 (- 0.71/+ 0.71) Delta= -0.201 E(NOE)= 0.040
========== spectrum 1 restraint 95 ==========
set-i-atoms
A 78 HIS HN
set-j-atoms
A 77 ARG HA
R<average>= 3.445 NOE= 2.40 (- 0.72/+ 0.72) Delta= -0.328 E(NOE)= 0.108
========== spectrum 1 restraint 147 ==========
set-i-atoms
A 82 GLY HN
set-j-atoms
A 80 ARG HB2
R<average>= 5.022 NOE= 3.21 (- 1.29/+ 1.29) Delta= -0.518 E(NOE)= 0.269
========== spectrum 1 restraint 219 ==========
set-i-atoms
B 94 LYS HB2
set-j-atoms
B 94 LYS HD1
B 94 LYS HD2
R<average>= 3.205 NOE= 2.25 (- 0.63/+ 0.63) Delta= -0.329 E(NOE)= 0.108
========== spectrum 1 restraint 246 ==========
set-i-atoms
B 95 TYR HE1
B 95 TYR HE2
set-j-atoms
B 95 TYR HB2
R<average>= 4.428 NOE= 3.00 (- 1.13/+ 1.13) Delta= -0.300 E(NOE)= 0.090
========== spectrum 1 restraint 271 ==========
set-i-atoms
B 96 LYS HB2
set-j-atoms
B 95 TYR HB1
R<average>= 5.265 NOE= 3.44 (- 1.48/+ 1.48) Delta= -0.338 E(NOE)= 0.114
========== spectrum 1 restraint 327 ==========
set-i-atoms
B 99 PHE HN
set-j-atoms
B 95 TYR HA
R<average>= 3.886 NOE= 2.69 (- 0.90/+ 0.90) Delta= -0.293 E(NOE)= 0.086
========== spectrum 1 restraint 340 ==========
set-i-atoms
B 99 PHE HE1
B 99 PHE HE2
set-j-atoms
B 99 PHE HA
R<average>= 4.683 NOE= 3.19 (- 1.28/+ 1.28) Delta= -0.212 E(NOE)= 0.045
========== spectrum 1 restraint 348 ==========
set-i-atoms
B 99 PHE HE1
B 99 PHE HE2
set-j-atoms
B 99 PHE HD1
B 99 PHE HD2
R<average>= 2.194 NOE= 1.61 (- 0.33/+ 0.33) Delta= -0.256 E(NOE)= 0.065
========== spectrum 1 restraint 369 ==========
set-i-atoms
B 100 LEU HN
set-j-atoms
B 100 LEU HG
R<average>= 4.105 NOE= 2.85 (- 1.02/+ 1.02) Delta= -0.234 E(NOE)= 0.055
========== spectrum 1 restraint 391 ==========
set-i-atoms
B 103 VAL HN
set-j-atoms
B 99 PHE HA
R<average>= 5.393 NOE= 3.52 (- 1.55/+ 1.55) Delta= -0.324 E(NOE)= 0.105
========== spectrum 1 restraint 444 ==========
set-i-atoms
B 106 HIS HN
set-j-atoms
B 102 GLY HA1
B 102 GLY HA2
R<average>= 3.735 NOE= 2.66 (- 0.86/+ 0.86) Delta= -0.211 E(NOE)= 0.044
========== spectrum 1 restraint 530 ==========
set-i-atoms
B 110 TRP HZ2
set-j-atoms
B 110 TRP HH2
R<average>= 2.450 NOE= 1.65 (- 0.34/+ 0.34) Delta= -0.463 E(NOE)= 0.215
========== spectrum 1 restraint 534 ==========
set-i-atoms
B 110 TRP HD1
set-j-atoms
B 110 TRP HA
R<average>= 4.443 NOE= 3.01 (- 1.13/+ 1.13) Delta= -0.302 E(NOE)= 0.091
========== spectrum 1 restraint 547 ==========
set-i-atoms
B 111 ARG HN
set-j-atoms
B 111 ARG HG1
B 111 ARG HG2
R<average>= 3.869 NOE= 2.69 (- 0.91/+ 0.91) Delta= -0.266 E(NOE)= 0.071
========== spectrum 1 restraint 558 ==========
set-i-atoms
B 112 TYR HN
set-j-atoms
B 109 PHE HA
R<average>= 3.927 NOE= 2.76 (- 0.95/+ 0.95) Delta= -0.213 E(NOE)= 0.045
========== spectrum 1 restraint 569 ==========
set-i-atoms
B 112 TYR HB1
set-j-atoms
B 112 TYR HE1
B 112 TYR HE2
R<average>= 4.411 NOE= 2.95 (- 1.09/+ 1.09) Delta= -0.376 E(NOE)= 0.142
========== spectrum 1 restraint 570 ==========
set-i-atoms
B 112 TYR HB2
set-j-atoms
B 112 TYR HE1
B 112 TYR HE2
R<average>= 4.414 NOE= 2.98 (- 1.11/+ 1.11) Delta= -0.316 E(NOE)= 0.100
========== spectrum 1 restraint 615 ==========
set-i-atoms
B 115 GLY HN
set-j-atoms
B 114 ALA HA
R<average>= 3.560 NOE= 2.53 (- 0.80/+ 0.80) Delta= -0.226 E(NOE)= 0.051
========== spectrum 1 restraint 650 ==========
set-i-atoms
B 118 ALA HN
set-j-atoms
B 115 GLY HA1
B 115 GLY HA2
R<average>= 3.688 NOE= 2.57 (- 0.83/+ 0.83) Delta= -0.287 E(NOE)= 0.083
========== spectrum 1 restraint 651 ==========
set-i-atoms
B 118 ALA HN
set-j-atoms
B 117 LEU HA
R<average>= 3.322 NOE= 2.32 (- 0.68/+ 0.68) Delta= -0.323 E(NOE)= 0.104
NOEPRI: RMS diff. = 0.066, #(violat.> 0.2)= 21 of 660 NOEs
NOEPRI: RMS diff. class COMP = 0.066, #(viol.> 0.2)= 21 of 660 NOEs
X-PLOR>
X-PLOR>stop
HEAP: maximum use= 3292244 current use= 671768
X-PLOR: total CPU time= 0.1000 s
noe15.res :
X-PLOR>print threshold= 0.2 noe
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++ CLASS COMP +++++++++++++++++++++++++++++++++++
for this class: SCALe= 1.000 AVERage=sum POTEntial=soft-square
SQCOnstant= 1.000 SQEXponent= 2 SQOFfsets(+/-)= 0.000 0.000
SOEXponent= 1 RSWItch= 1.000 ASYMptote= 2.000
========== spectrum 1 restraint 72 ==========
set-i-atoms
A 77 ARG HN
set-j-atoms
A 75 GLY HN
R<average>= 2.172 NOE= 1.62 (- 0.33/+ 0.33) Delta= -0.217 E(NOE)= 0.047
========== spectrum 1 restraint 95 ==========
set-i-atoms
A 78 HIS HN
set-j-atoms
A 77 ARG HA
R<average>= 3.454 NOE= 2.40 (- 0.72/+ 0.72) Delta= -0.337 E(NOE)= 0.114
========== spectrum 1 restraint 106 ==========
set-i-atoms
A 79 SER HN
set-j-atoms
A 78 HIS HA
R<average>= 3.381 NOE= 2.40 (- 0.72/+ 0.72) Delta= -0.269 E(NOE)= 0.072
========== spectrum 1 restraint 170 ==========
set-i-atoms
B 91 PHE HA
set-j-atoms
B 93 ASP HN
R<average>= 3.825 NOE= 2.63 (- 0.87/+ 0.87) Delta= -0.323 E(NOE)= 0.105
========== spectrum 1 restraint 189 ==========
set-i-atoms
B 92 LYS HB1
B 92 LYS HB2
set-j-atoms
B 96 LYS HE1
R<average>= 4.459 NOE= 2.95 (- 1.09/+ 1.09) Delta= -0.420 E(NOE)= 0.177
========== spectrum 1 restraint 196 ==========
set-i-atoms
B 94 LYS HN
set-j-atoms
B 91 PHE HA
R<average>= 4.058 NOE= 2.84 (- 1.01/+ 1.01) Delta= -0.210 E(NOE)= 0.044
========== spectrum 1 restraint 197 ==========
set-i-atoms
B 94 LYS HE1
B 94 LYS HE2
set-j-atoms
B 92 LYS HA
R<average>= 5.017 NOE= 3.00 (- 1.12/+ 1.12) Delta= -0.898 E(NOE)= 0.806
========== spectrum 1 restraint 213 ==========
set-i-atoms
B 94 LYS HE1
B 94 LYS HE2
set-j-atoms
B 118 ALA HA
R<average>= 4.800 NOE= 3.05 (- 1.30/+ 1.30) Delta= -0.450 E(NOE)= 0.203
========== spectrum 1 restraint 219 ==========
set-i-atoms
B 94 LYS HB2
set-j-atoms
B 94 LYS HD1
B 94 LYS HD2
R<average>= 3.188 NOE= 2.25 (- 0.63/+ 0.63) Delta= -0.312 E(NOE)= 0.098
========== spectrum 1 restraint 246 ==========
set-i-atoms
B 95 TYR HE1
B 95 TYR HE2
set-j-atoms
B 95 TYR HB2
R<average>= 4.480 NOE= 3.00 (- 1.13/+ 1.13) Delta= -0.352 E(NOE)= 0.124
========== spectrum 1 restraint 261 ==========
set-i-atoms
B 96 LYS HG1
B 96 LYS HG2
set-j-atoms
B 92 LYS HB1
R<average>= 6.733 NOE= 2.75 (- 0.95/+ 3.25) Delta= -0.733 E(NOE)= 0.538
========== spectrum 1 restraint 271 ==========
set-i-atoms
B 96 LYS HB2
set-j-atoms
B 95 TYR HB1
R<average>= 5.307 NOE= 3.44 (- 1.48/+ 1.48) Delta= -0.380 E(NOE)= 0.144
========== spectrum 1 restraint 327 ==========
set-i-atoms
B 99 PHE HN
set-j-atoms
B 95 TYR HA
R<average>= 3.829 NOE= 2.69 (- 0.90/+ 0.90) Delta= -0.236 E(NOE)= 0.056
========== spectrum 1 restraint 348 ==========
set-i-atoms
B 99 PHE HE1
B 99 PHE HE2
set-j-atoms
B 99 PHE HD1
B 99 PHE HD2
R<average>= 2.194 NOE= 1.61 (- 0.33/+ 0.33) Delta= -0.256 E(NOE)= 0.065
========== spectrum 1 restraint 530 ==========
set-i-atoms
B 110 TRP HZ2
set-j-atoms
B 110 TRP HH2
R<average>= 2.450 NOE= 1.65 (- 0.34/+ 0.34) Delta= -0.463 E(NOE)= 0.215
========== spectrum 1 restraint 534 ==========
set-i-atoms
B 110 TRP HD1
set-j-atoms
B 110 TRP HA
R<average>= 4.557 NOE= 3.01 (- 1.13/+ 1.13) Delta= -0.416 E(NOE)= 0.173
========== spectrum 1 restraint 569 ==========
set-i-atoms
B 112 TYR HB1
set-j-atoms
B 112 TYR HE1
B 112 TYR HE2
R<average>= 4.412 NOE= 2.95 (- 1.09/+ 1.09) Delta= -0.377 E(NOE)= 0.142
========== spectrum 1 restraint 570 ==========
set-i-atoms
B 112 TYR HB2
set-j-atoms
B 112 TYR HE1
B 112 TYR HE2
R<average>= 4.412 NOE= 2.98 (- 1.11/+ 1.11) Delta= -0.314 E(NOE)= 0.098
========== spectrum 1 restraint 615 ==========
set-i-atoms
B 115 GLY HN
set-j-atoms
B 114 ALA HA
R<average>= 3.557 NOE= 2.53 (- 0.80/+ 0.80) Delta= -0.223 E(NOE)= 0.050
========== spectrum 1 restraint 650 ==========
set-i-atoms
B 118 ALA HN
set-j-atoms
B 115 GLY HA1
B 115 GLY HA2
R<average>= 3.696 NOE= 2.57 (- 0.83/+ 0.83) Delta= -0.295 E(NOE)= 0.087
========== spectrum 1 restraint 651 ==========
set-i-atoms
B 118 ALA HN
set-j-atoms
B 117 LEU HA
R<average>= 3.288 NOE= 2.32 (- 0.68/+ 0.68) Delta= -0.289 E(NOE)= 0.083
NOEPRI: RMS diff. = 0.079, #(violat.> 0.2)= 21 of 660 NOEs
NOEPRI: RMS diff. class COMP = 0.079, #(viol.> 0.2)= 21 of 660 NOEs
X-PLOR>
X-PLOR>stop
HEAP: maximum use= 3292244 current use= 671768
X-PLOR: total CPU time= 0.0900 s
la commande :
awk -f 'compter_vio_noe_delta' noe*.res |sort -n +1 -2 +0 -1 | grep -v "()/()" | sed "s/\.r/ /"g >> vionoe
et le fichier resultat :
77(HN)/75(HN) 1 15.
77(HN)/76(HA) 1 6
79(HN)/78(HA) 1 15.
82(HN)/80(HB2) 1 6
91(HA)/93(HN) 1 15.
92(HB1)/96(HE1) 1 15.
94(HE1)/118(HA) 1 15.
94(HE1)/92(HA) 1 15.
94(HN)/91(HA) 1 15.
96(HG1)/92(HB1) 1 15.
99(HE1)/99(HA) 1 6
100(HN)/100(HG) 1 6
103(HN)/99(HA) 1 6
106(HN)/102(HA1) 1 6
111(HN)/111(HG1) 1 6
112(HN)/109(HA) 1 6
78(HN)/77(HA) 2 15. 6
94(HB2)/94(HD1) 2 15. 6
95(HE1)/95(HB2) 2 15. 6
96(HB2)/95(HB1) 2 15. 6
99(HE1)/99(HD1) 2 15. 6
99(HN)/95(HA) 2 15. 6
110(HD1)/110(HA) 2 15. 6
110(HZ2)/110(HH2) 2 15. 6
112(HB1)/112(HE1) 2 15. 6
112(HB2)/112(HE1) 2 15. 6
115(HN)/114(HA) 2 15. 6
118(HN)/115(HA1) 2 15. 6
118(HN)/117(HA) 2 15. 6
est ce plus clair?
Hors ligne
#5 Le 19/05/2017, à 10:40
- pingouinux
Re : [RESOLU] extraire et compter à partir de plusieurs fichiers
Regarde déjà ma réponse en #2, qui devrait te donner une piste.
Il t'est peut-être possible d'élaguer tes fichiers pour faire un cas test simplifié.
Hors ligne
#6 Le 19/05/2017, à 10:41
- pingouinux
Re : [RESOLU] extraire et compter à partir de plusieurs fichiers
Nos messages se sont croisés. Je regarderai un peu plus tard.
Hors ligne
#7 Le 19/05/2017, à 10:44
- grraougrraou
Re : [RESOLU] extraire et compter à partir de plusieurs fichiers
merci, je vais elaguer.
par contre, je pensais que ijkl etaient definis (vu qu'on s'en sert dans num[...] )
Hors ligne
#8 Le 19/05/2017, à 10:52
- grraougrraou
Re : [RESOLU] extraire et compter à partir de plusieurs fichiers
en elaguant : voila ce qui marchait
noe6.res :
========== spectrum 1 restraint 73 ==========
set-i-atoms
A 77 ARG HN
set-j-atoms
A 76 CYS HA
R<average>= 3.289 NOE= 2.38 (- 0.71/+ 0.71) Delta= -0.201 E(NOE)= 0.040
========== spectrum 1 restraint 95 ==========
set-i-atoms
A 78 HIS HN
set-j-atoms
A 77 ARG HA
R<average>= 3.445 NOE= 2.40 (- 0.72/+ 0.72) Delta= -0.328 E(NOE)= 0.108
noe15.res :
========== spectrum 1 restraint 72 ==========
set-i-atoms
A 77 ARG HN
set-j-atoms
A 75 GLY HN
R<average>= 2.172 NOE= 1.62 (- 0.33/+ 0.33) Delta= -0.217 E(NOE)= 0.047
========== spectrum 1 restraint 95 ==========
set-i-atoms
A 78 HIS HN
set-j-atoms
A 77 ARG HA
R<average>= 3.454 NOE= 2.40 (- 0.72/+ 0.72) Delta= -0.337 E(NOE)= 0.114
compter :
BEGIN {n = 1; m = 1; OFS = "\t" }
{b = index(FILENAME,"noe") ; d = b - 3}
/set-i-atoms/ {n = NR}
NR == n + 1 {i = $2; k = $4}
/set-j-atoms/ {m = NR}
NR == m + 1 {j = $2; l = $4; c = ++count[i "(" k ")" "/" j "(" l ")"] ; \
num[i "(" k ")" "/" j "(" l ")" ":" c] = substr(FILENAME,4,3)}
END {for (ij in count)
{
print "\n"
ORS = "\t"
print ij " ", count[ij]
for ( ic = 1; ic <= count[ij]; ic++)
{
ORS = " "
print num[ij ":" ic]
}
}
}
la commande :
awk -f 'compter' noe*.res |sort -n +1 -2 +0 -1 | grep -v "()/()" | sed "s/\.r/ /"g >> noe
et le resultat : noe :
77(HN)/75(HN) 1 15.
77(HN)/76(HA) 1 6
78(HN)/77(HA) 2 15. 6
ce que je voudrais obtenir :
77(HN)/75(HN) 1 15. -0.217
77(HN)/76(HA) 1 6 -0.201
78(HN)/77(HA) 2 15. -0.337 6 -0.328
et meme idealement (mais bon)
6 | 15
=======================
77(HN)/75(HN) 1 | -0.217
77(HN)/76(HA) 1 -0.201 |
78(HN)/77(HA) 2 -0.328 | -0.337
Dernière modification par grraougrraou (Le 19/05/2017, à 12:56)
Hors ligne
#9 Le 19/05/2017, à 11:39
- pingouinux
Re : [RESOLU] extraire et compter à partir de plusieurs fichiers
Je me base sur tes fichiers en #8.
Tu ne traites pas les lignes commençant par
R<average>=
et ne risques donc pas d'y récupérer des informations.
Hors ligne
#10 Le 19/05/2017, à 11:41
- grraougrraou
Re : [RESOLU] extraire et compter à partir de plusieurs fichiers
non, je sais bien.... je montrais le script qui marchait (quand je ne cherchais pas a avoir l'info du "delta")
c'est a partir de ce script que j'ai essayé d'obtenir aussi cette info :
BEGIN {n = 1; m = 1; OFS = "\t" }
/set-i-atoms/ {n = NR}
NR == n + 1 {i = $2; k = $4}
/set-j-atoms/ {m = NR}
NR == m + 1 {j = $2; l = $4}
/R<ave/ {r = $9 ;\
c = ++count[i "(" k ")" "/" j "(" l ")" ] ; \
num[i "(" k ")" "/" j "(" l ")" ":" c] = substr(FILENAME,4,3) ; \
delta[num[ij]] = r
}
END {for (ij in count)
{
print "\n"
ORS = "\t"
print ij " ", count[ij]
for ( ic = 1; ic <= count[ij]; ic++)
{
ORS = " "
print num[ij ":" ic] ; print delta[num[ij]]
}
}
}
Dernière modification par grraougrraou (Le 19/05/2017, à 11:42)
Hors ligne
#11 Le 19/05/2017, à 13:06
- pingouinux
Re : [RESOLU] extraire et compter à partir de plusieurs fichiers
Le problème vient de ce que ton delta ne dépend que du n° du fichier.
J'en ai profité pour simplifier un peu le script.
/set-i-atoms/ {getline; i = $2; k = $4}
/set-j-atoms/ {getline; j = $2; l = $4}
/R<ave/ { r = $9
ij=i "(" k ")" "/" j "(" l ")"
c = ++count[ij]
ijc = ij ":" c
num[ijc] = gensub("noe(.+)\.res","\\1","",FILENAME)
delta[ij,num[ijc]] = r
}
END {for (ij in count)
{
print "\n"
ORS = "\t"
print ij " ", count[ij]
for ( ic = 1; ic <= count[ij]; ic++)
{
ORS = " "
ijc = ij ":" ic
print num[ijc] ; print delta[ij,num[ijc]]
}
}
}
Et il te suffit de l'appeler ainsi :
awk -f 'compter' noe*.res |sort -n +1 -2 >noe
Hors ligne
#12 Le 19/05/2017, à 13:11
- grraougrraou
Re : [RESOLU] extraire et compter à partir de plusieurs fichiers
merci beaucoup
Hors ligne
#13 Le 19/05/2017, à 16:45
- grraougrraou
Re : [RESOLU] extraire et compter à partir de plusieurs fichiers
j'ai tout de meme une question :
Je ne comprends pas tres bien la commande
gensub("noe(.+)\\.res","\\1","",FILENAME)
D'apres ce que j'ai compris de la commande gensub, on remplace quelque chose dans FILENAME
je comprends qu'on recupere le numero (X) du fichier noeX.res, mais le "'(+.)" et le "\\1" me questionnent....
merci encore de ton aide
Hors ligne
#14 Le 19/05/2017, à 17:05
- pingouinux
Re : [RESOLU] extraire et compter à partir de plusieurs fichiers
gensub("noe(.+)\.res","\\1","",FILENAME)
.+ : N'importe quel caractère suivi de 1 ou plusieurs caractères quelconques (on aurait pu se restreindre aux chiffres)
"\\1" : Est remplacé par le contenu du couple de parenthèses correspondant à la première parenthèse ouvrante (ici le nombre)
Hors ligne
#15 Le 19/05/2017, à 17:24
- grraougrraou
Re : [RESOLU] extraire et compter à partir de plusieurs fichiers
merci
Hors ligne
#16 Le 19/05/2017, à 21:40
- pingouinux
Re : [RESOLU] extraire et compter à partir de plusieurs fichiers
Tu peux aussi essayer cette variante :
BEGIN { fmt1="%-18s %5s %s"; fmt2="%7s %s"; PROCINFO["sorted_in"]="@ind_num_asc" }
/set-i-atoms/ {getline; i = $2; k = $4}
/set-j-atoms/ {getline; j = $2; l = $4}
/R<ave/ { r = $9
ij=i "(" k ")" "/" j "(" l ")"
c = ++count[ij]
ijc = ij ":" c
num_fic = gensub(".*noe(.+)\.res","\\1","",FILENAME)
num[ijc] = num_fic
liste_num[num_fic]=""
delta[ij,num[ijc]] = r
}
END {
printf(fmt1,"","","|")
for (k in liste_num) printf(fmt2,k,"|"); print ""
printf(fmt1,"","","=")
for (k in liste_num) printf("========="); print ""
for (ij in count)
{
printf(fmt1,ij,count[ij],"|")
for (k in liste_num) {
if ( delta[ij,k] ) printf(fmt2,delta[ij,k],"|")
else printf(fmt2,"" ,"|")
}
print ""
}
}
à lancer ainsi (pas de tri, il est déjà fait, voir s'il convient)
awk -f 'compter' noe*.res
Édité : Ajout du tri des résultats
Dernière modification par pingouinux (Le 20/05/2017, à 06:12)
Hors ligne
#17 Le 22/05/2017, à 10:25
- grraougrraou
Re : [RESOLU] extraire et compter à partir de plusieurs fichiers
je teste ca tout de suite.... et après j'essaie de comprendre comment ca marche
Hors ligne
#18 Le 22/05/2017, à 10:33
- grraougrraou
Re : [RESOLU] extraire et compter à partir de plusieurs fichiers
merci, c'est un super tableau. Comme je le voulais.
me reste plus qu'a tout comprendre.....
Hors ligne