Recherche du minimum dans un fichier
Résolu/Fermé
hbcrayon
Messages postés
18
Date d'inscription
jeudi 18 juin 2009
Statut
Membre
Dernière intervention
21 novembre 2015
-
17 août 2009 à 12:51
hbcrayon Messages postés 18 Date d'inscription jeudi 18 juin 2009 Statut Membre Dernière intervention 21 novembre 2015 - 31 août 2009 à 17:14
hbcrayon Messages postés 18 Date d'inscription jeudi 18 juin 2009 Statut Membre Dernière intervention 21 novembre 2015 - 31 août 2009 à 17:14
A voir également:
- Recherche du minimum dans un fichier
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier host - Guide
- Ouvrir un fichier .bin - Guide
8 réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
17 août 2009 à 13:00
17 août 2009 à 13:00
Salut,
Tout dépend de comment sont représentées les valeurs dans ton fichier ;-\
As-tu un exemple de fichier et de ce que tu voudrais obtenir en sortie ?
Tout dépend de comment sont représentées les valeurs dans ton fichier ;-\
As-tu un exemple de fichier et de ce que tu voudrais obtenir en sortie ?
hbcrayon
Messages postés
18
Date d'inscription
jeudi 18 juin 2009
Statut
Membre
Dernière intervention
21 novembre 2015
17 août 2009 à 13:07
17 août 2009 à 13:07
Le fichier se présente comme ça :
184.60
137.28
113.85
85.27
53.73
21.37
4.03
4.02
3.92
3.91
3.85
3.84
3.80
3.71
3.26
1.19
0.21
0.10
0.08
0.07
0.07
... (50 valeurs en tout)
et je veux juste afficher à l'écran la plus petite valeur et le numéro de la ligne.
D'ailleurs, je viens de remarquer qu'un truc m'embête car le fichier ne contient que des valeurs précise à 2 chiffres après la virgule alors que les valeurs initiales sont beaucoup plus précises.
Mon fichier initial ressemble à ça :
ITERATION = 1 on grands-pas
- SHOT = 1
CurrentMisfit (abs) = 9.8527912E+07
CurrentMisfit (%) = 184.6047
- SHOT = 1
TestMisfit = 8.9954960E+07
CorrMisfit = -5076911.
DiffMisfit = 1579421.
step_numerat = 0.0000000E+00 | step_denomin = 2.2477965E-05
step_numerat = -5076911. | step_denomin = 1579421.
iter= 1 : 184.60 | 0.00 | 168.54 | -9.51 | 2.96 | 0.252E+00 | 3.214
ITERATION = 2 on grands-pas
- SHOT = 1
CurrentMisfit (abs) = 7.3270552E+07
CurrentMisfit (%) = 137.2818
alpha = -9.6228242E-02
- SHOT = 1
TestMisfit = 6.0764304E+07
CorrMisfit = -7816828.
DiffMisfit = 3125115.
iter= 2 : 137.28 | 0.00 | 113.85 | -14.65 | 5.86 | 0.638E+00 | 1.000
(avec 50 fois le même bloc)
Et mon fichier sur lequel je travaille est construit avec la commande suivante :
grep iter fichiercomplique.txt | grep -v NaN | awk '{print $4}' > fichtemp.txt
Le manque de précision va être un problème pour la sélection de ma valeur minimum. Donc comment puis-je y remédier ?
Merci,
HBcrayon
184.60
137.28
113.85
85.27
53.73
21.37
4.03
4.02
3.92
3.91
3.85
3.84
3.80
3.71
3.26
1.19
0.21
0.10
0.08
0.07
0.07
... (50 valeurs en tout)
et je veux juste afficher à l'écran la plus petite valeur et le numéro de la ligne.
D'ailleurs, je viens de remarquer qu'un truc m'embête car le fichier ne contient que des valeurs précise à 2 chiffres après la virgule alors que les valeurs initiales sont beaucoup plus précises.
Mon fichier initial ressemble à ça :
ITERATION = 1 on grands-pas
- SHOT = 1
CurrentMisfit (abs) = 9.8527912E+07
CurrentMisfit (%) = 184.6047
- SHOT = 1
TestMisfit = 8.9954960E+07
CorrMisfit = -5076911.
DiffMisfit = 1579421.
step_numerat = 0.0000000E+00 | step_denomin = 2.2477965E-05
step_numerat = -5076911. | step_denomin = 1579421.
iter= 1 : 184.60 | 0.00 | 168.54 | -9.51 | 2.96 | 0.252E+00 | 3.214
ITERATION = 2 on grands-pas
- SHOT = 1
CurrentMisfit (abs) = 7.3270552E+07
CurrentMisfit (%) = 137.2818
alpha = -9.6228242E-02
- SHOT = 1
TestMisfit = 6.0764304E+07
CorrMisfit = -7816828.
DiffMisfit = 3125115.
iter= 2 : 137.28 | 0.00 | 113.85 | -14.65 | 5.86 | 0.638E+00 | 1.000
(avec 50 fois le même bloc)
Et mon fichier sur lequel je travaille est construit avec la commande suivante :
grep iter fichiercomplique.txt | grep -v NaN | awk '{print $4}' > fichtemp.txt
Le manque de précision va être un problème pour la sélection de ma valeur minimum. Donc comment puis-je y remédier ?
Merci,
HBcrayon
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
17 août 2009 à 13:18
17 août 2009 à 13:18
Il est déjà trié ton fichier là ? Ça sera toujours le cas ?
Ensuite pour ton histoire de valeur plus précise, pourquoi ne récupères-tu pas la ligne avec "CurrentMisfit (%) =" qui apparemment contient la bonne valeur, plutôt que la ligne avec "iter" ?
Ensuite pour ton histoire de valeur plus précise, pourquoi ne récupères-tu pas la ligne avec "CurrentMisfit (%) =" qui apparemment contient la bonne valeur, plutôt que la ligne avec "iter" ?
hbcrayon
Messages postés
18
Date d'inscription
jeudi 18 juin 2009
Statut
Membre
Dernière intervention
21 novembre 2015
17 août 2009 à 13:24
17 août 2009 à 13:24
Oui pour la réponse à la deuxième question, j'ai déjà corrigé et j'ai les valeurs plus précises.
Par contre, c'est oui et non à la 1ère question car en fait la valeur diminue jusqu'à un seuil qui dépend de chaque expérience (c'est une série de 50 itérations sur une inversion de données) puis oscille de peu mais ça peut compter quand même donc non la dernière valeur n'est pas toujours la plus petite... ce serait trop simple !!!!!
Le nouveau fichier sur lequel je travaille ressemble à ça :
184.6047
137.2818
113.8497
85.27073
53.73389
21.37161
4.027525
4.019840
3.916320
3.912370
3.850162
3.840795
3.795539
3.710032
3.262137
1.193330
0.2067064
9.7332962E-02
8.1045449E-02
7.0168599E-02
6.9240019E-02
6.9212057E-02
6.9187112E-02
6.9196522E-02
6.9196321E-02
6.9202892E-02
6.9205575E-02
6.9212317E-02
6.9219872E-02
6.9221303E-02
6.9222197E-02
...
6.9230862E-02 (exemple comme quoi la dernière valeur n'est pas forcément la plus petite !)
Par contre, c'est oui et non à la 1ère question car en fait la valeur diminue jusqu'à un seuil qui dépend de chaque expérience (c'est une série de 50 itérations sur une inversion de données) puis oscille de peu mais ça peut compter quand même donc non la dernière valeur n'est pas toujours la plus petite... ce serait trop simple !!!!!
Le nouveau fichier sur lequel je travaille ressemble à ça :
184.6047
137.2818
113.8497
85.27073
53.73389
21.37161
4.027525
4.019840
3.916320
3.912370
3.850162
3.840795
3.795539
3.710032
3.262137
1.193330
0.2067064
9.7332962E-02
8.1045449E-02
7.0168599E-02
6.9240019E-02
6.9212057E-02
6.9187112E-02
6.9196522E-02
6.9196321E-02
6.9202892E-02
6.9205575E-02
6.9212317E-02
6.9219872E-02
6.9221303E-02
6.9222197E-02
...
6.9230862E-02 (exemple comme quoi la dernière valeur n'est pas forcément la plus petite !)
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
17 août 2009 à 13:26
17 août 2009 à 13:26
Essaie ça :
grep -n "$(sort -n plop | head -1)" fichier
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
hbcrayon
Messages postés
18
Date d'inscription
jeudi 18 juin 2009
Statut
Membre
Dernière intervention
21 novembre 2015
17 août 2009 à 13:29
17 août 2009 à 13:29
La réponse est simple : sort ne fonctionne pas !!
>>>>
sort: Échec d'ouverture: plop: Aucun fichier ou dossier de ce type
1:184.6047
2:137.2818
3:113.8497
4:85.27073
5:53.73389
...
50:6.9230862E-02
>>>>
sort: Échec d'ouverture: plop: Aucun fichier ou dossier de ce type
1:184.6047
2:137.2818
3:113.8497
4:85.27073
5:53.73389
...
50:6.9230862E-02
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
17 août 2009 à 13:32
17 août 2009 à 13:32
Oups ;-((
grep -n "$(sort -n fichier | head -1)" fichierDésolé ;-(
hbcrayon
Messages postés
18
Date d'inscription
jeudi 18 juin 2009
Statut
Membre
Dernière intervention
21 novembre 2015
17 août 2009 à 13:36
17 août 2009 à 13:36
Apparemment ce n'est pas mal, mais il ne comprend les puissances de 10 donc cela me donne pour les 23 premières valeurs suivant :
1:184.6047
2:137.2818
3:113.8497
4:85.27073
5:53.73389
6:21.37161
7:4.027525
8:4.019840
9:3.916320
10:3.912370
11:3.850162
12:3.840795
13:3.795539
14:3.710032
15:3.262137
16:1.193330
17:0.2067064
18:9.7332962E-02
19:8.1045449E-02
20:7.0168599E-02
21:6.9240019E-02
22:6.9212057E-02
23:6.9187112E-02
la réponse 17:0.2067064 qui est le minimum si les puissances de 10 ne sont pas prises en compte !!!
1:184.6047
2:137.2818
3:113.8497
4:85.27073
5:53.73389
6:21.37161
7:4.027525
8:4.019840
9:3.916320
10:3.912370
11:3.850162
12:3.840795
13:3.795539
14:3.710032
15:3.262137
16:1.193330
17:0.2067064
18:9.7332962E-02
19:8.1045449E-02
20:7.0168599E-02
21:6.9240019E-02
22:6.9212057E-02
23:6.9187112E-02
la réponse 17:0.2067064 qui est le minimum si les puissances de 10 ne sont pas prises en compte !!!
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
17 août 2009 à 15:15
17 août 2009 à 15:15
Il n'y aura que des puissances de 10 ?
C'est un peu tiré par les cheveux, mais bon...
;-))
C'est un peu tiré par les cheveux, mais bon...
jp@MDK:~/tmpfs ssh$ cat plop 184.6047 137.2818 113.8497 85.27073 53.73389 21.37161 4.027525 4.019840 3.916320 3.912370 3.850162 3.840795 3.795539 3.710032 3.262137 1.193330 0.2067064 9.7332962E-02 8.1045449E-02 7.0168599E-02 6.9240019E-02 6.9212057E-02 6.9187112E-02 6.9196522E-02 6.9196321E-02 6.9202892E-02 6.9205575E-02 6.9212317E-02 6.9219872E-02 6.9221303E-02 6.9222197E-02 jp@MDK:~/tmpfs ssh$ B=$(echo "$(while read line;do echo "scale=9;${line/E*//100}" | bc;done < plop | sort -n | head -1) * 100" | bc) jp@MDK:~/tmpfs ssh$ grep -n "${B::9}" plop 23:6.9187112E-02 jp@MDK:~/tmpfs ssh$Il y a sûrement une solution plus élégante (awk ? Perl ?), faut voir...
;-))
dubcek
Messages postés
18752
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
3 octobre 2024
5 619
17 août 2009 à 17:10
17 août 2009 à 17:10
hello
une solution avec awk
une solution avec awk
$ awk '{printf("%s %20.10f\n", $1, $1)}' < fichier |sort -nk 2 | awk 'NR == 1 {print $1 ; exit}' 6.9187112E-02
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
17 août 2009 à 17:19
17 août 2009 à 17:19
Ben voilà ;-))
hbcrayon
Messages postés
18
Date d'inscription
jeudi 18 juin 2009
Statut
Membre
Dernière intervention
21 novembre 2015
27 août 2009 à 17:16
27 août 2009 à 17:16
Merci dubcek...
Je mets un peu de temps à répondre j'ai eu d'autre chose à gérer avant.
Ce qui m'embête c'est que oui j'ai le minimum maintenant mais je ne vois pas comment obtenir le numero de la ligne où il se trouve... ce qui est important pour moi car il correspond au numéro de l'itération que je dois connaître !
Quelle commande dois-je faire en faire ? Surement un head -1 quelquepart mais où ?
Merci d'avance
HBcrayon
Je mets un peu de temps à répondre j'ai eu d'autre chose à gérer avant.
Ce qui m'embête c'est que oui j'ai le minimum maintenant mais je ne vois pas comment obtenir le numero de la ligne où il se trouve... ce qui est important pour moi car il correspond au numéro de l'itération que je dois connaître !
Quelle commande dois-je faire en faire ? Surement un head -1 quelquepart mais où ?
Merci d'avance
HBcrayon
hbcrayon
Messages postés
18
Date d'inscription
jeudi 18 juin 2009
Statut
Membre
Dernière intervention
21 novembre 2015
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
27 août 2009 à 17:18
27 août 2009 à 17:18
Merci Jipicy, tu t'es vraiment cassé la tête pour moi et ça me touche.
Je viens de poser encore un petit détail pour connaître le numéro de la ligne où on trouve le minimum et après c'est fini...
Et franchement vous m'avez vraiment aidé car ça commençait sérieusement à me saoûler de le faire manuellement en regardant chaque fichier !!!
Quelle grosse épine du pied enlevée !
Merci,
HBcrayon
Je viens de poser encore un petit détail pour connaître le numéro de la ligne où on trouve le minimum et après c'est fini...
Et franchement vous m'avez vraiment aidé car ça commençait sérieusement à me saoûler de le faire manuellement en regardant chaque fichier !!!
Quelle grosse épine du pied enlevée !
Merci,
HBcrayon
bob031
Messages postés
8158
Date d'inscription
samedi 7 août 2004
Statut
Membre
Dernière intervention
1 septembre 2014
472
>
hbcrayon
Messages postés
18
Date d'inscription
jeudi 18 juin 2009
Statut
Membre
Dernière intervention
21 novembre 2015
27 août 2009 à 18:24
27 août 2009 à 18:24
Bonjour,
sinon il y a un petit outil : num-utils
http://suso.suso.org/programs/num-utils/
mais cela devient ensuite un peu compliqué pour ce type d'outil ...
sinon il y a un petit outil : num-utils
http://suso.suso.org/programs/num-utils/
mais cela devient ensuite un peu compliqué pour ce type d'outil ...
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
>
hbcrayon
Messages postés
18
Date d'inscription
jeudi 18 juin 2009
Statut
Membre
Dernière intervention
21 novembre 2015
27 août 2009 à 18:30
27 août 2009 à 18:30
Essaye ça :
awk '{printf("%s %s %20.10f\n", NR, $1, $1)}' < fichier |sort -nk 3 | awk 'NR == 1 {print $1" : "$2 ; exit}';-))