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 :

Récupérer champs dans un fichier


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Septembre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Récupérer champs dans un fichier
    Bonjour à toutes et à tous.
    J'ai un fichier, il contient une ligne, dans cette ligne je voudrai récupérer plusieurs champs grâce à un script Shell:
    Voici en rouge et vert les différentes parties de la ligne que je voudrai récupérer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     0000000800009035AU1100000TEST AUTO TEST AUTO JJA                                       31   RUE MASSENET                                                       LILLE                      066                    00000                          000001          10                                  RON06600              000000000000000000000011                                                   0000000000           0002155      02000000000000000000000000000000000000000000000QUAPROJ   1191009QUAPROJ   11910091723501 
    J'ai essayé avec un cut, mais les champs textes pouvant changer de taille selon les fichiers cela n'est pas possible, j'ai vu qu'on pouvait utiliser awk ou bien grep mais étant novice en commande linux, je n'arrive pas à avoir quelque chose qui fonctionne.
    Je vous remercie d'avance pour votre aide.

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

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

    il n'y a pas de délimiteur de champs dans le fichier.
    on ne peut rien faire.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 238
    Points : 13 443
    Points
    13 443
    Par défaut
    Bonjour

    Difficile d'extrapoler avec une seule ligne d'exemple.

    • Soit la ligne a des champs de taille fixe (espaces comptés...)
    • Soit la ligne a des champs de taille variable et un délimiteur (à trouver).

    Tu dois trouver dans quel cas tu te trouves.

    De plus, les nombreux espaces ne sont peut-être pas des espaces mais des tabulations (idéales comme délimiteurs...)
    Pour identifier un éventuel délimiteur, tu peux utiliser une commande comme celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    head -n 1 fichier.txt | od -c
    Si le fichier est mal formaté, plains-toi à ton fournisseur pour qu'il le formate correctement.

    Pour plus d'aide, donne-nous plus de lignes d'exemple.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 538
    Points : 19 360
    Points
    19 360
    Par défaut
    oui, bien sûr, des champs à taille fixe !
    c'est plutôt rare dans lma vie courante. vous en rencontrez ? dans quel domaine ?
    c'est plus fréquent à l'école.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 238
    Points : 13 443
    Points
    13 443
    Par défaut
    À chaud, la première idée qui me vient est l'entête des trames réseaux.
    Plus on va monter dans les couches logiques, et plus les choses sont adaptables et configurables.
    Plus on va descendre dans les couches physiques, et plus les tailles sont figées; car derrière, il y a l'électronique. Si ton circuit intégré a 8 pattes, pour l'étendre, il ne suffit pas de faire papattes = papattes + 4.
    D'ailleurs, ils sont passés de ipv4 à ipv6 mais la taille des adresses n'est toujours pas variable. Comme quoi, on n'apprend pas toujours des erreurs du passé.

    Je verrais bien la ligne de equilibriumjerx comme sortant d'un banc d'essai ou d'un outil numérique de test sans ordinateur.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Septembre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour à toutes et à tous.
    Ce fichier est généré depuis un AS400 (oui çà existe encore )
    Voilà le résultat de la commande head -n 1 fichier.txt | od -c

    Nom : screen3.png
Affichages : 528
Taille : 14,8 Ko

    j'ai ici un autre exemple de fichier avec les infos que je voudrai.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     0000000800009026AU1100000FOURSAL   FOURSAL                                                  101 RUE EMM                                                        LILLE                      066                    00000                          000001          1234                                RON06600              000000000000000000000011                                                   0000000000           0003245      02000000000000000000000000000000000000000000000QUAPROJ   1190612QUAPROJ   11906121119001
    Nom : screen2.png
Affichages : 512
Taille : 17,6 Ko

    Merci pour vos aides.

  7. #7
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 238
    Points : 13 443
    Points
    13 443
    Par défaut
    j'ai ici un autre exemple de fichier avec les infos que je voudrai.
    Tu exagères. T'aurais pu donner plus d'exemples (anonymisés).

    Voilà le résultat de la commande head -n 1 fichier.txt | od -c
    Cela confirme une ligne avec des champs de taille fixe. Il reste à déterminer les positions de début de champ. Le plus flou est la séparation entre le champ 2 et 3.
    Quelques débuts de champs :
    1 36 160 187 210 241 257 293 315 390 411 424 481 498

    Donc pour extraire, tu peux, par exemple, utiliser "cut" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ cut -c13-16,292-295,186-189 fichier.txt                                                                       
    9035 066 RON
    9026 066 RON
    À toi de finir le boulot

    Le conseil est de reformater en champs séparés par des points-virgules et d'utiliser "awk" pour traiter un tel fichier.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  8. #8
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 266
    Points : 12 681
    Points
    12 681
    Par défaut
    Il faudrait que tu nous donnes les colonnes de départ de chaque champs, si tu veux un truc de précis, ici le mieux que l'on puisse faire, c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat fichier | cut -c14-17,37-210,294-296
    Cordialement.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 538
    Points : 19 360
    Points
    19 360
    Par défaut
    Citation Envoyé par FLodelarab
    Le conseil est de reformater en champs séparés par des points-virgules et d'utiliser "awk" pour traiter un tel fichier.
    Gawk a une variable FIELDWIDTHS pour traiter le champs à taille fixe.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. récupérer le type des champs dans un fichier access
    Par patrickbaras dans le forum WinDev
    Réponses: 2
    Dernier message: 06/09/2010, 11h29
  2. Comment selectionné UN champs dans un fichier
    Par shoofleouf dans le forum Linux
    Réponses: 2
    Dernier message: 08/11/2007, 17h52
  3. recuperer 2 champs dans un fichier
    Par vince2005 dans le forum Langage
    Réponses: 1
    Dernier message: 28/09/2007, 17h33
  4. Réponses: 18
    Dernier message: 22/06/2006, 11h28
  5. Insertion de champs dans un fichier
    Par flouflou dans le forum Linux
    Réponses: 3
    Dernier message: 16/08/2004, 15h48

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