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 :

Traitement de lignes consécutives fichier csv


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 23
    Par défaut Traitement de lignes consécutives fichier csv
    Bonjour à tous ,
    J'ai un problème assez particulier que je n'arrive toujours pas à resoudre ,
    Je dispose d'un fichier csv sous cette forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    4311474K;U3TP;MT201403;3;U3TP;           -3;           0;;Non Declechement;;;;
    4508678M;MABS;MT201403;0;MABS;         3063;           0;;Non Declechement;;;;
    4509272H;U2AB;MT201403;0;U2AB;         2018;           0;;Non Declechement;;;;
    4610973C;UVGUVJUVLS;MT201403;3;UVGUVJUVLS;           -5;           0;;Non Declechement;;;;
    et en fait je voudrais traiter ce fichier par lignes consecutives pour ensuite charger dans une base oracle .
    pour le traitement , je veux traiter la ligne i en changeant certaines colonnes si
    ligne(i).champs5 = ligne(i+1).champs5
    ligne(i).champs4=1 et ligne(i+1).champs4 =3
    ligne(i).champs7 = ligne(i+1).champs6

    et ainsi de suite pour le reste du fichier .
    Si vous avez des idées de comment on peut verifier ces conditions
    Merci d'avance pour votre aide !

  2. #2
    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
    Bonjour,

    awk est l'outil qu'il faut :
    - enregistrer la première ligne dans une variable ligne_i.
    - découper la variable ligne_i dans un tableau (avec split())
    - comparer et faire ce qui doit l'être
    - enregistrer la ligne courante dans la variable ligne_i
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 23
    Par défaut
    Merci N Bah pour ta réponse
    Je vais voir ce que ça donne avec awk car ma première solution a été d'essayer avec sed mais sans succès .
    Si j'ai bien compris je split les lignes i et i+1 dans un tableau et je compare les champs , ensuite j'enregistre la ligne courante dans $ligne_i .
    Avec cette solution , est ce que c'est possible de parcourir toutes les lignes 2 à 2 du fichier ?

    Je reviens vers toi au plus vite .
    Merci

  4. #4
    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
    tu ssplit uniquement la variable dans laquelle est stockée la ligne précédente; les champs de la ligne courante sont accessibles dans $1,$2..., en fonction du séparateur de champs défini, soit par une option (-F), soit dans l'instance BEGIN (BEGIN{FS=<séparateur>}).

    Avec cette solution , est ce que c'est possible de parcourir toutes les lignes 2 à 2 du fichier ?
    c'est à dire ? comparer les lignes 1 et 2, 3 et 4, 5 et 6... ?

    le pseudo-code donné compare les lignes 1 et 2, 2 et 3, 3 et 4...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 23
    Par défaut
    Oui c'est bien ça : comparer les lignes 1 et 2, 3 et 4, 5 et 6...

    ok pour le pseudo-code . Je m'y met et reposte la solution au plus vite .
    Merci encore

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 23
    Par défaut
    N BaH ,
    Comme je suis un peu à court de temps , j'aurai besoin de ton aide .
    j'ai un peu du mal avec awk vu que je ne connais pas très bien cet outil
    je te met un bout de code ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while read i; do
    echo $i
    line=$i
    awk -v ligne="$line" '{split ($ligne , a, ";"); print a[1] a[2] a[3] }'
    done < monfichier
    Comme résultat , Awk ne parcourt pas la première ligne , il split bien autres lignes .
    Faut -il tout mettre dans le awk ou faire du shell/awk ?

    Merci par avance pour ton retour !

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

Discussions similaires

  1. Saut de ligne dans fichier CSV
    Par pausg dans le forum Langage
    Réponses: 15
    Dernier message: 29/07/2011, 16h27
  2. Réponses: 18
    Dernier message: 24/06/2011, 15h13
  3. [AC-2000] Suppression lignes sur fichier CSV depuis Access
    Par electronedf dans le forum VBA Access
    Réponses: 8
    Dernier message: 25/10/2010, 13h35
  4. Compter les lignes du fichier CSV
    Par miniRoshan dans le forum Général Java
    Réponses: 5
    Dernier message: 28/05/2010, 11h37
  5. [CSV] Traitement d'un gros fichier CSV
    Par Adrinou dans le forum Langage
    Réponses: 6
    Dernier message: 09/10/2007, 12h40

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