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

Shell et commandes GNU Discussion :

Rechercher/remplacer une chaine de caractères dans plusieurs fichiers


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé Avatar de _shuriken_
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2006
    Messages : 543
    Points : 454
    Points
    454
    Par défaut Rechercher/remplacer une chaine de caractères dans plusieurs fichiers
    Bonjour à tous,

    Voila, j'ai plusieurs fichiers avec la même structure, j'aimerai me positionner sur un champs bien précis, et faire un test, s'il est vide et mettre "00" à la place.

    J'avais pensé à un script du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/bin/bash
     
    awk '
    { if ( substr($0,41,56)=="")
         print substr($0,41,56) "00"
      else
         print
    }' Fichier_en_entree> Fichier_en_sortie
     
     
    # Fin du script
    Il me faut un code, qui prenne en compte des milliers de fichiers, parcourir ligne par ligne chaque fichier, se positionner sur le champs en question et faire un test s'il est vide et le remplacé par 00.

    Merci d'avance à vous tous !
    "When you can measure what you are speaking about, and express it in numbers, you know something about it; but when you cannot measure it, when you cannot express it in numbers, your knowledge is of a meager and unsatisfactory kind; it may be the beginning of knowledge, but you have scarcely in your thoughts advanced to the state of Science, whatever the matter may be."

    Lord Kelvin - 1883.

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    tu peux le laisser comme ça et l'appeler depuis un find.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nohup find /chemin/depart/ -type f -exec TONSCRIPT.awk {} \;  &

  3. #3
    Membre confirmé Avatar de _shuriken_
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2006
    Messages : 543
    Points : 454
    Points
    454
    Par défaut
    Merci,

    Mais mon script ne passe pas, je ne sais pas pourquoi, il s'exécute sans erreur, mais ne modifie rien.
    "When you can measure what you are speaking about, and express it in numbers, you know something about it; but when you cannot measure it, when you cannot express it in numbers, your knowledge is of a meager and unsatisfactory kind; it may be the beginning of knowledge, but you have scarcely in your thoughts advanced to the state of Science, whatever the matter may be."

    Lord Kelvin - 1883.

  4. #4
    Membre confirmé Avatar de _shuriken_
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2006
    Messages : 543
    Points : 454
    Points
    454
    Par défaut
    Bonjour à tous,

    Ce bout de code règle mon soucis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    #!/bin/sh
     
    rejected_directory = `cd /home/perso/data`
     
    if [ -d $rejected_directory ];then
             echo "Directory doesn't exist, please see path describe below"
    else
    	# Find files on directory
    	file_liste = `ll`
            for i in $file_liste;do
     
    	sed -e 's/^\(.\{41\}\)  /\100/'  $i
    	done
    fi
    "When you can measure what you are speaking about, and express it in numbers, you know something about it; but when you cannot measure it, when you cannot express it in numbers, your knowledge is of a meager and unsatisfactory kind; it may be the beginning of knowledge, but you have scarcely in your thoughts advanced to the state of Science, whatever the matter may be."

    Lord Kelvin - 1883.

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rejected_directory = `cd /home/perso/data`
    ça m'étonnerait que cela fasse quoi que ce soit, et aussi que cela ne provoque pas d'erreur :
    - il ne devrait pas y avoir d'espaces autour du signe égal
    - cd n'affiche rien
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par _shuriken_ Voir le message
    Citation Envoyé par _shuriken_ Voir le message
    Bonjour à tous,

    Voila, j'ai plusieurs fichiers avec la même structure, j'aimerai me positionner sur un champs bien précis, et faire un test, s'il est vide et mettre "00" à la place.

    J'avais pensé à un script du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/bin/bash
     
    awk '
    { if ( substr($0,41,56)=="")
         print substr($0,41,56) "00"
      else
         print
    }' Fichier_en_entree> Fichier_en_sortie
     
     
    # Fin du script


    Merci,

    Mais mon script ne passe pas, je ne sais pas pourquoi, il s'exécute sans erreur, mais ne modifie rien.
    Ben c'est normal !!! Ton script n'est pas sensé modifier le fichier d'origine mais créer une copie modifiée !!!

    Une petite modification de ton script et associé à la suggestion de frp31, ça fera ce que tu veux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/bin/bash
     
    exec 3<Fichier_en_entree
    rm -f Fichier_en_entree
     
    awk '
    { if ( substr($0,41,56)=="")
         print substr($0,41,56) "00"
      else
         print
    }' 0<&3 >Fichier_en_entree
     
     
    # Fin du script
    Accessoirement ce que tu nous as écrit hier (comme l'a dit N_Bah) n'a aucun sens !!!
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 04/12/2014, 17h26
  2. Remplacer une chaine de caractère dans un fichier texte.
    Par Empty_body dans le forum VBA Access
    Réponses: 1
    Dernier message: 19/01/2008, 11h16
  3. Réponses: 3
    Dernier message: 25/07/2006, 08h40
  4. Réponses: 4
    Dernier message: 18/07/2006, 16h31
  5. [VB]Recherche d'une chaine de caractère dans un fichier
    Par Empty_body dans le forum VB 6 et antérieur
    Réponses: 26
    Dernier message: 16/02/2006, 09h10

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