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 :

Découper une ligne par séparateur


Sujet :

Linux

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 8
    Points : 2
    Points
    2
    Par défaut Découper une ligne par séparateur
    Bonjour,

    j'aimerais écrire un script shell qui lis un fichier texte contenant plusieurs lignes et chaque ligne contient des informations séparés par des tabulations. je voudrais donc séparer ces informations sachant que chaque ligne est indépendante des autres.
    Le but serais ensuite de stocker les informations récuperés dans une base de donné


    Mes connaissances en script shell étant assez limité je voudrais savoir si quelqu'un pourrait m'aider.
    donc comment récupérer ligne par ligne puis séparés par des tabulations.

    et si possible aussi m'indiquer comment stocker ces info dans une base.


    merci !!

  2. #2
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    certains outils, style Oracle SQL Loader, permettent d'importer et de transformer des données directement. Sinon il y awk,perl et companie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $ awk '{printf "\042%s\042,%d,\042%s\042\n",$1,$2,$5}' FS=: /etc/passwd
    "root",0,"root"
    "bin",0,"bin"
    "daemon",0,"Daemon"
    "lp",0,"Printing daemon"

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Quelle est ta bdd ?
    :q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
    :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
    Jabber: ripat at im.apinc.org

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    j'utilise une base de donnée MySQL


    voici le format du fichier que j'aimerais decouper
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    V0LOUR      002243xxxx060418170117011710   582   565   124006309    0
    V0LOUR      002243xxxx060418170117011710   582   565   124006309    0
    V0LOUR      002243xxxx060418170117011710   582   565   124006309    0
    ...
    j'aimerais donc separer les valeur separés par des tabulations et les injecter dans
    ma base, en fait une table de la base dont chacun des ces info correspond à un champs (enfin je voudrai aussi séparer le 2eme champs en plusieurs partie car il contient plussieurs info)


    Sinon ca confirme ce qu'on m'a dis le perl est tres bien pour ce que je veux faire,mais le souci c'est que je touche pas une bille en perl. La c'est meme plus de l'aide qui me faudrais. Mais sait on jamais si une ame charitable dans un grand élan de bonté me fait un script pourquoi pas. Enfin on peut toujours rever !


    merci pour vos reponses !

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Tu peux importer ce fichier directement dans MySQL avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    LOAD DATA INFILE 'ton_fichier.txt'
    INTO TABLE ta_table
    FIELDS TERMINATED BY '\t' 
    LINES TERMINATED BY '\n';
    Si ton fichier est en format windows, songe à remplacer les fins de lignes par \r\n.
    :q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
    :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
    Jabber: ripat at im.apinc.org

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    merci c'est cool !!
    je vais tester ca aussi

    mais avec cette methode se pose le probleme de mon champs que je veux couper en plusieurs partie parce qu'il contient plusieurs info qui correspond à des champs differents de la base
    ouais je sais suis un




    merci encore

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Citation Envoyé par folks
    merci c'est cool !!
    je vais tester ca aussi

    mais avec cette methode se pose le probleme de mon champs que je veux couper en plusieurs partie parce qu'il contient plusieurs info qui correspond à des champs differents de la base
    ouais je sais suis un
    Non, non. Un forum est fait pour ça.

    Dans ce cas effectivement tu pourras traiter le fichier avant injection dans MySQL.

    Quel champ dois-tu scinder et où. Pourrais-tu donner un exemple.
    :q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
    :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
    Jabber: ripat at im.apinc.org

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    en fait il y en a plusieurs des champs a scinder, en gros les 2 premiers

    voici comment je devrai les decouper :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    V0LOUR      002243xxxx060418170117011710
     
    V0 - LOUR      002243xxxx - 060418170 - 117011710
    sachant que les valeurs peuvent varier d'une ligne à l'autre


    voila !

    merci

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Si tes enregistrements doivent toujours être découpés au même endroit, essaye ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cat ton_fichier |
     awk -v OFS=";" '{print substr($1, 1, 3), substr($1, 4), substr($2, 1, 10), substr($2, 11, 9), substr($2, 20)}'
    :q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
    :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
    Jabber: ripat at im.apinc.org

  10. #10
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    pourquoi un cat et | ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    awk -v OFS=";" '{print substr($1, 1, 3), substr($1, 4), substr($2, 1, 10), substr($2, 11, 9), substr($2, 20)}' ton_fichier
    Marc
    Slackware for ever ......
    BASH - KSH ( http://marcg.developpez.com/ksh/ )

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Citation Envoyé par MarcG
    pourquoi un cat et | ?
    Aucune raison particulière. Mauvaise habitude sans doute...
    :q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
    :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
    Jabber: ripat at im.apinc.org

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    merci,
    il est vraiment exelent ce script, je connaissais pas awk c'est super puissant

    mais j'ai encore un petit souci, enfin pour l'instant, j'en aurais surement d'autre
    c'est que je vois pas comment stocker les champs séparé dans un tableau 2D pour pouvoir séparer d'abord par ligne puis par champs

    et j'aimerais savoir si on peut faire des INSERT dans une base avec ce script ?


    encore merci !!

  13. #13
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Désolé mais je ne comprends pas la question. Pourrais-tu mettre un petit exemple?
    :q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
    :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
    Jabber: ripat at im.apinc.org

Discussions similaires

  1. Selectionner une ligne par un click + rollaver
    Par faico dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/07/2006, 17h17
  2. afficher une ligne(par son numero) d'une JTable
    Par linouline dans le forum Composants
    Réponses: 7
    Dernier message: 27/05/2006, 14h11
  3. Réponses: 9
    Dernier message: 22/05/2006, 12h21
  4. [SELECT DISTINCT] [Débutant] Ne garder qu'une ligne par id
    Par toniolol dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 12/12/2005, 16h07
  5. Réponses: 3
    Dernier message: 29/08/2005, 16h44

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