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 :

Extraire des données dans un fichier


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2010
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 51
    Par défaut Extraire des données dans un fichier
    Bonjour , voici mon besoin, j'ai x fichiers que je dois parcourir sans prendre en compte la première ligne car il s'agit de la ligne d'entête . Seules les données m’intéressent .
    Chaque ligne des x fichiers a exactement le même format, pour chaque ligne je dois extraire 7 zones bien précises avec le début et la fin de la zone et le résultat final sur les x fichiers doit être dans un seul fichier . toutes les lignes sont au format fixe sans aucun séparateur

    Prenons un exemple .

    Fichier 1 : test01.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Nom Prenom adresse codepostal age=> ligne entete
    Dupont jacques  rue de paris      75000 54
    Dupont olivier    rue de bordeaux  33000 45
    ....

    Fichier 2 : test02.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Nom Prenom age adresse codepostal age=> ligne entete
    Martin jacques  rue de lyon       69000 74
    Martin olivier    rue de marseille  13000 25
    ....

    Donc je veux parcourir ces deux fichiers sans prendre en compte la première ligne et je souhaite le nom , l'adresse et l'age dans un seul fichier avec les 4 lignes de mon exemple .
    Il s'agit de la position de 1 à 7 pour le nom de 17 à 28 pour l 'adresse et pour finir l'age de 41 à 43 .
    Mon fichier final sera donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dupont rue de paris       54
    Dupont rue de bordeaux 45
    Martin  rue de lyon        74
    Martin  rue de marseille  25
    J'ai vu qu'avec cut on pouvait le faire mais les exemples montrent seulement sur une seule zone . Donc en résumé parcourir les x fichiers , ne pas tenir compte de la première ligne , extraire des zones de chaque ligne à partir du nombre de caracteres (Du 3ème au 5ème caractère par ex) et le résultat doit se trouver dans un seul fichier .
    Merci de votre aide .

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par hycar33 Voir le message
    j'ai x fichiers
    Donc je veux parcourir ces deux fichiers sans prendre en compte la première ligne et je souhaite le nom , l'adresse et l'age dans un seul fichier avec les 4 lignes de mon exemple .
    Il s'agit de la position de 1 à 7 pour le nom de 17 à 28 pour l 'adresse et pour finir l'age de 41 à 43 .
    D'après tes spécifications, voici ce que je ferais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for f in *.txt
    do tail +2 "$f" | cut -c1-7,17-28,41-43
    done
    Le tail +2 est une des nombreuses possibilités pour sauter la première ligne.

    Ça marche avec les fichiers que tu proposes, mais seulement à peu près, car, manifestement, les âges ne sont pas exactement en position 41 à 43...

    PS: j'espère bien que ce n'est qu'un exercice car je connais pas mal de personnes dont le nom fait plus de 7 caractères !

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    Citation Envoyé par hycar
    toutes les lignes sont au format fixe sans aucun séparateur
    un format fixe est un format dont les champs comportent un nombre défini de caractères et/ou d'espaces.
    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    12car       6 car 6 car 
    champ 1     champ2champ3
    ce format est défini quelque part, ou alors il faut le déduire de l'observation. :/

    et on ne pas traiter ce type de format sans le connaître préalablement.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2010
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 51
    Par défaut
    Peut être que je n 'ai pas été très clair , mes fichiers sont bien de format fixe , tous les champs sont exactement à la même position.
    Je pensais que la commande cut pouvait m 'aider à découper une ligne et récupérer des zones bien précises en fonction de la position d'un caractère ou une colonne(debut ;fin ).
    Dans ton exemple comment je fais pour avoir le champ1 et champ3 a partir de la position pour chaque ligne et sans prendre la premiere ligne
    12car 6 car 6 car
    champ 1 champ2champ3

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    je traite ce type de fichier avec gawk qui possède une variable FIELDWIDTHS qui permet de définir la taille des champs.
    choisir ensuite quels champs afficher est simplissime.

    si tu tiens à cut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo 'champ 1     champ2champ3'| cut -c1-12,19-                                                                                                                                                               
    champ 1     champ3
    un peu pénible de calculer à quel caractère se trouve le champ suivant.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. [MySQL] Comment extraire des données dans un fichier .svc depuis une page web
    Par pierrot10 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 18/12/2013, 12h02
  2. Extraire des données dans un fichier
    Par kali38 dans le forum Général Python
    Réponses: 4
    Dernier message: 31/01/2011, 13h51
  3. Réponses: 5
    Dernier message: 05/12/2008, 15h23
  4. Extraire des données dans un fichier .csv
    Par orj30754 dans le forum C
    Réponses: 7
    Dernier message: 03/11/2006, 14h48

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