IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

[shell script][debutant] Se promener dans un fichier


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Par défaut [shell script][debutant] Se promener dans un fichier
    Bonjour, bonsoir,

    Malgre l'abondance d'informations a ce sujet sur internet (et meme sur ce forum), j'ai du mal a maitriser les b a ba de la navigation dans un fichier.

    Trop d'information tue-t-elle l'information ?

    Toujours est-il que je me trouve bien embete puisque je ne trouve pas de solution evidente a mon probleme, qui pourtant ne me paraissait pas si sorcier :

    J' ai une variable stockee dans un fichier texte a une ligne quelconque et au milieu d'autres lignes contenant d'autres informations.
    Je connais juste le formatage de cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Nom de ma variable : valeur de ma variable
    Je desire tout simplement recuperer cette variable, lui ajouter par exemple 1 et rajouter une ligne a la fin de mon fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ma variable incrementee : valeur de mavariable + 1
    Forcement, pour ce faire, je regarde du cote de sed, awk etc. mais j'ai du mal a m'en sortir, je suis submerge par le nombre d'options...
    Alors si quelqu'un pouvait m'aider, j'en serais bien content.

    Merci de m'avoir lu.

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Il y a plusieurs etapes a definir.
    1. Comment reperer la ligne a prendre en compte? Le nom de la variable peut-il etre utilise pour cela? Que faire si plusieurs lignes incluent le meme nom de variable? grep est l'outil approprie pour extraire une (des) ligne(s) dans un fichier.
    2. Comment analyser la ligne? Les deux-points sont-ils toujours le separateur de champ a attendre? La valeur apres les deux-points est-elle unique? Peut-elle etre toujours convertie en entier? Pour l'increment, un awk avec ":" comme field separator (FS) fera l'affaire.
    3. Ajouter la nouvelle ligne au fichier. La c'est simple, un cat redirige vers un fichier temporaire puis un ecrasement de l'ancien fichier (via mv) fera l'affaire.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Par défaut
    Excuse moi por mon manque de precision, c'est vrai que tout ca n'est pas tres clair.

    Citation Envoyé par DaZumba Voir le message
    Il y a plusieurs etapes a definir.
    1. Comment reperer la ligne a prendre en compte? Le nom de la variable peut-il etre utilise pour cela? Que faire si plusieurs lignes incluent le meme nom de variable? grep est l'outil approprie pour extraire une (des) ligne(s) dans un fichier.
    2. Comment analyser la ligne? Les deux-points sont-ils toujours le separateur de champ a attendre? La valeur apres les deux-points est-elle unique? Peut-elle etre toujours convertie en entier? Pour l'increment, un awk avec ":" comme field separator (FS) fera l'affaire.
    La variable est un simple float et le debut de la ligne est toujours ecrit de la meme maniere. Du coup je me suis tente a cette commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    variable=$(cat fichier.txt | grep 'Nom de ma variable :' | sed 's/[^0-9]*//')
    ..et ca marche plutot bien !
    Je peux proceder ainsi ou il y a mieux ?

    1. Ajouter la nouvelle ligne au fichier. La c'est simple, un cat redirige vers un fichier temporaire puis un ecrasement de l'ancien fichier (via mv) fera l'affaire.
    Je vais voir si c'est si simple que ca, merci pour l'indication !

  4. #4
    Membre émérite Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Par défaut
    Sauf erreur de ma part, ça fonctionne avec un entier et pas avec un "float".

    Une façon de faire :

    Exemple, extraire la valeur de la variable var1 du fichier ci-dessous :

    test.txt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    .../...
    var1 : 23
    var2 : 25
    var3 : 33
    .../...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var=$(sed -n '/^var1 :/s/^.*: *//p' test.txt)
    ((var++))   #-- incrémentation de 1
    Une page très claire sur les « expressions régulières »
    http://www.shellunix.com/regexp.html

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Par défaut
    Citation Envoyé par BlaireauOne Voir le message
    Sauf erreur de ma part, ça fonctionne avec un entier et pas avec un "float".

    Une façon de faire :

    Exemple, extraire la valeur de la variable var1 du fichier ci-dessous :

    test.txt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    .../...
    var1 : 23
    var2 : 25
    var3 : 33
    .../...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var=$(sed -n '/^var1 :/s/^.*: *//p' test.txt)
    ((var++))   #-- incrémentation de 1
    Une page très claire sur les « expressions régulières »
    http://www.shellunix.com/regexp.html
    C'est bien ce que je voulais faire.
    Merci pour le lien, j'y vois plus clair sur les expressions regulieres.

    Citation Envoyé par DaZumba Voir le message
    Ajouter la nouvelle ligne au fichier. La c'est simple, un cat redirige vers un fichier temporaire puis un ecrasement de l'ancien fichier (via mv) fera l'affaire.
    Pour ce faire j'utilise pour le moment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "Nom de ma variable : $mavariable" >> monfichier.txt
    Est-ce une solution viable ou un 'cat' serait plus approprie ?

    Maintenant je veux aller un petit peu plus loin : je voudrais reeecrire ma variable dans un format particulier, avec 4 chiffres significatifs avant la virgule. Si mavariable = 52, je voudrais ecrire 0052 par exemple. J'ai regarde du cote de 'scale', mais ca concerne d'avantage les chiffres apres la virgule...

  6. #6
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par levit Voir le message
    Pour ce faire j'utilise pour le moment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "Nom de ma variable : $mavariable" >> monfichier.txt
    Est-ce une solution viable ou un 'cat' serait plus approprie ?
    C'est une tres bonne solution, c'est moi qui ne sais plus reconnaitre les solutions simples...

    Maintenant je veux aller un petit peu plus loin : je voudrais reeecrire ma variable dans un format particulier, avec 4 chiffres significatifs avant la virgule. Si mavariable = 52, je voudrais ecrire 0052 par exemple. J'ai regarde du cote de 'scale', mais ca concerne d'avantage les chiffres apres la virgule...
    Des chiffres significatifs avant la virgule, cela ne veut rien dire. C'est plutot que tu veux t'assurer d'une largeur de champ constante. Je ne sais pas tres bien comment faire cela simplement...

  7. #7
    Membre émérite Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Par défaut
    http://pwet.fr/man/linux/commandes/posix/printf

    printf "Nom de ma variable : %04d\n" $mavariable >> monfichier.txt

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. script shell pour remplacer un mot dans un fichier
    Par MSM_007 dans le forum Linux
    Réponses: 2
    Dernier message: 17/06/2010, 20h37
  2. Réponses: 11
    Dernier message: 20/09/2007, 16h58
  3. Scripts VBS + DOS - sortie dans un fichier de logs
    Par kayanwan dans le forum VBScript
    Réponses: 8
    Dernier message: 14/09/2007, 15h34
  4. shell ajout chaine de caractere dans un fichier
    Par cubepiege dans le forum Linux
    Réponses: 5
    Dernier message: 09/07/2007, 10h22
  5. shell script: placer une variable dans le clavier
    Par kaukos dans le forum Linux
    Réponses: 6
    Dernier message: 30/06/2007, 07h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo