fr  en
Hypo-thèses

Bienvenue, vous n'êtes pas connecté. ( Se connecter - S'enregistrer )

Hypo-thèses > Forum > Parlons sciences ! > Informatique > Petit problème de Bash

RSS >  Petit problème de Bash
MarbolanGos #1 30/01/2008 - 09h43
  •   Up
Hors ligne


Chimie

Tout d'abord bonjour. Ca fait quelques temps que je suis inscris ici (depuis la news sur le SdZ) et je regarde l'évolution de ce site car le principe est très intréressant.

J'en profite pour faire la présentation du pourquoi j'ai mon problème de bash.
J'utilise un logiciel de Modélisation Moléculaire (Sur Wikipedia désolé c'est la version anglaise mais la version Française est pourrie) qui est en cours de développement. J'ai donc des tests à faire au niveau de ce logiciel afin de savoir s'il me donne ce qu'on lui demande (logique).

Et c'est là que l'utilisation du bash devient super importante car il faut que je lise un fichier de sortie qui fait la plupart du temps entre 600000 et 700000 lignes (oui y'a pas d'erreurs de zéros). Il faut que j'extraie les données de ce fichier.

J'ai déjà fini la plus grande partie vu que je trace avec Xmgrace la plupart des variations d'énergie. Mais depuis une semaine je bloque sur un point où je ne trouve pas la solution et c'est là que j'en reviens à l'aide de quelqu'un si possible.

Dans mon fichier j'ai une ligne qui s'appelle : dielectric constant suivi d'une valeur. Mon objectif est de tracer cette constante en fonction de l'apparition de l'occurence.
La solution que j'utilise actuellement est de faire un grep -n qui me permet d'obtenir le numéro de la ligne et je m'en sers comme index pour mon axe des abscisses. C'est ça mon problème !
Etant donné que les lignes où apparaissent mon occurence sont aléatoires (pas totalement mais on ne peut rechercher une suite logique) je ne peut effectuer une opération pour ramener mon numéro de ligne à 1, 2...

Si quelqu'un a une idée (ou besoin de précision sur mon soucis je suis pas sur d'vaoir été clair) pour me sortir de ce micro problème. Je ne demande bien sur pas la solution mais si on me dit de passer par telle ou telle voie cela m'arrangerait pas mal car je n'ai pas trop d'idée.
Kabefis #2 30/01/2008 - 13h37
  •   Up
Hors ligne Courriel


T'arrive à récupérer les données d'un flux vers un fichier mais tu n'arrive pas à récupérer uniquement une valeur d'une ligne "dielectric constant xx", c'est ca?
Je connais pas énormément batch, et je vois pas où ca coince avec grep, il te renvoie bien la ligne que tu veux nan?
Tu peux même choisir seulement le dernier champs en utilisant à la suite la commande cut. Et avec grep tu peux aussi savoir à quel ligne ca se situe.

Montre ton bout de code, ce que tu obtient et ce que tu voudrais obtenir. Ca sera tout de suite plus simple à bien comprendre le problème et pour le résoudre :)
Erreurs sur erreurs la vie évolue, l'humanité est une des plus grandes sources d'erreurs.
gouttegd #3 30/01/2008 - 14h08
  •   Up
Validateur

Hors ligne


Biologie

Donc, si je comprends bien, tu récupères chaque occurence de cette "dieletric constant" et tu voudrais la représenter sur un graphe avec, en abscisse, le n° de l'occurence, c'est ça ?

Dans ce cas, une possibilité serait de  filtrer le fichier d'entrée pour ne plus laisser que les lignes commençant par "dielectric constant" ; de cette manière, le n° de la ligne correspondrait au n° d'occurence.

Il y a plusieurs moyens de procéder, par exemple avec deux appels successifs à grep :
grep '^dielectric constant' fichier.dat | grep -n '^dielectric constant'

ou encore en un seul coup avec awk :
awk '{ /^dielectric constant/ { print ++occurence ":" $3 }' fichier.dat

(à adapter en fonction du format du fichier d'entrée et du format voulu en sortie).

En espérant avoir bien compris le problème. :)

P. S. : awk est absolument génial pour ce genre de problèmes d'extraction de données. ;) Perl peut aussi être une option, en particulier si tu as besoin de faire ça sur des systèmes non-Unix (donc sans awk, grep et consorts) comme Windows.
Ce message a été édité par gouttegd le 30/01/2008 à 14h12.
Lorsque vous avez éliminé l'impossible, ce qui reste, même si c'est improbable, doit être la vérité. --- A. Conan Doyle
MarbolanGos #4 30/01/2008 - 15h07
  •   Up
Hors ligne


Chimie

Merci pour les réponses je pense que la réponse de gouttegd est exactement ce que je veux en adaptant un peu avec quelques Regex parce que j'ai un petit soucis avec le logiciel vu que par moment il affiche du texte alors qu'il devrait afficher des valeurs...

Faut dire que c'est un vrai logiciel beta comme on pourrait dire.

La version awk est la meilleure je pense. Je tente et je vous dis ce que cela donne.

[edit] ca marche parfaitement la version "double" grep sans avoir à considérer de regex (coup de bol ?). J'ai pris cette version ca marche sans rien changer à ce qui est donné. Mais je me dis vraiment que je suis bête de pas avoir pensé au double grep surtout que dans mon code je fais déjà des doubles grep par moment... Il faut vraiment de l'aide extérieur par moment pour juste une toute petite manip...
Ce message a été édité par MarbolanGos le 30/01/2008 à 15h15.

 >  Réponse rapide

Composez votre message

Hypo-thèses > Forum > Parlons sciences ! > Informatique > Petit problème de Bash

 >  Informations du forum

1 personne(s) présente(s) sur ce forum au cours des dernières 20 minutes (0 membre(s) et 1 invité(s)).

top top

Temps de génération = 0.04587s | Accessibilité | Nous cont@cter
valid xhtml valid CSS firefox firefox