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 :

[bash] utilisation de CAT/AWK pour parser un fichier CSV


Sujet :

Shell et commandes GNU

  1. #21
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FICHIER="`cat /home/afourquemin/file.cvs`"
    oui ca marche aussi ca...

  2. #22
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while read enreg; do
        echo $enreg
        USER=$(echo "$enreg" | cut -d';' -f1)
        NOM=$(echo "$enreg" | cut -d';' -f2)
        PASSWORD=$(echo "$enreg" | cut -d';' -f3)
        echo "$USER - $NOM - $PASSWORD"
    done < /home/root/scripts/file.csv
    marche pas !! sérieux ca me soule !!

    je ne sais pas se qu'il se passe ! j'ai l'impression que les ; foute la merde !

  3. #23
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    Non mais sérieu, je ne suis pas plus con qu'un autre !!!


    regardez :

    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
    16
    17
    18
    19
    20
    21
    #!/bin/bash
    # file_read
    FICHIER=$(cat /home/root/scripts/file.csv)
    echo $FICHIER
     
    for enreg in $FICHIER ; do
        echo $enreg
        USER=`echo $enreg | awk -F";" '{ print $1 }'`
        NOM=`echo $enreg | awk -F";" '{ print $2 }'`
        PASSWORD=`echo $enreg | awk -F";" '{ print $3 }'`
        echo "$USER - $NOM - $PASSWORD"
        #
        ### ton traitement
        #
    done
     
     
    [root@localhost scripts]# ./file_read 
    Jean;lapin;ghsdfjkdf antoine;petit;54sfsdf Jean-François;Saint-James;55454df Mikeal;dubois;; emmanuel;grout;dfklpsdf arnaud;fourquemin;;
    '/file_read: line 6: syntax error near unexpected token `do
    '/file_read: line 6: `for enreg in $FICHIER ; do
    des erreurs !

    Je viens de testé avec un fichier sans ;, tjr le même problème !

  4. #24
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    Vous savez quoi ?

    Je suis un DIEU ! j'ai trouvé l'erreur !!!

    for var in $FILE ;do

    le ;do, il faut le collé !

    Sinon j'ai une drole de découpe du fichier CSV :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    File.CSV :
    Jean;lapin;ghsdfjkdf
    antoine;petit;54sfsdf
    Jean-François;Saint-James;55454df;
    Mikeal;dubois;
    emmanuel;grout;dfklpsdf
    arnaud;fourquemin;
     
    >ATTENTION car certain login sont sans mot de passe, dans ce cas, $PASSWORD sera vide
     
    Script :
     
    #!/bin/bash
    # file_read
     
    FILE=$(cat /home/root/scripts/file.csv)
    echo $FILE
     
    for var in $FILE ;do
    	USER=`echo $var | awk -F";" '{ print $1 }'`
        	NOM=`echo $var | awk -F";" '{ print $2 }'`
        	PASSWORD=`echo $var | awk -F";" '{ print $3 }'`
        	echo "$USER - $NOM - $PASSWORD"
    done
     
    Réponse :
     
    [root@localhost scripts]# ./file_read 
    Jean;lapin;ghsdfjkdf; antoine;petit;54sfsdf; Jean-François;Saint-James;55454df; Mikeal;dubois;; emmanuel;grout;dfklpsdf; arnaud;fourquemin;;
     - ghsdfjkdf
     - 54sfsdf
     - 55454dfames
     - dubois
     - dfklpsdf
     - fourquemin
    Ca doit être du au faite que certain login sont sans mot de passe et donc ca merde sur la possition...

    Comment faire pour eviter ce problème ?

  5. #25
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    Salut

    Citation Envoyé par arnaudperfect
    Comment faire pour eviter ce problème ?
    Ne pas laisser la touche maj enfoncée quand on appuis sur espace... Selon la configuration, ça insère une espace insécable qui ne compte pas comme une espace (et pour cause...).

    Smortex

    Les FAQ Assembleur - Linux
    In The Beginning Was The Command Line Neal Stephenson

  6. #26
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    Je ne fais pas d'espace avec la touche MAJ enfoncé...

    le soucie c'est que je ne peux meme pas faire mon traitement après car des que je met des variable en ligne, ca sucre la 1er variable ecrite

  7. #27
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    salut,

    J'ai résolu le problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/bash
    # file_read
     
    FILE=$(cat /home/root/scripts/file.csv)
    echo $FILE
     
    for var in $FILE ;do
    	USER=`echo $var | awk -F";" '{ print $1 }'`NOM=`echo $var | awk -F";" '{ print $2 }'`PASSWORD=`echo $var | awk -F";" '{ print $3 }'`
        	echo "$USER - $NOM - $PASSWORD"
    done
    Tout s'affiche correctement, et je peux faire mes différents traitements par la suite.

    J'ai une autre question cependant : existe il un moyen pour dire "passe à l'enregistrement suivant"

    exemple, le script m'affiche

    Toto martin
    [différents traitements]
    utilisateur existant dans le systeme, voulez vous passez au suivant ?
    ...
    ...


    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/bash
    # file_read
     
    FILE=$(cat /home/root/scripts/file.csv)
    echo $FILE
     
    for var in $FILE ;do
    	USER=`echo $var | awk -F";" '{ print $1 }'`NOM=`echo $var | awk -F";" '{ print $2 }'`PASSWORD=`echo $var | awk -F";" '{ print $3 }'`
     
    -----
    Si (utilisateur présent dans /etc/passwd) alors
     Utilisateur présent dans le système voulez vous passer à un autre enregistrement ? o/n
    ----
     
    done
    merci d'avance

  8. #28
    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
    man bash:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     continue [n]
                  Reprendre l’exécution à l’itération suivante d’une boucle for, while, until ou encore select. Si n  est
                  indiqué,  reprendre  l’exécution  à  la n-ième boucle imbriquée. n doit être ≥ 1. Si n est supérieur au
                  nombre de boucles imbriquées, l’exécution reprend à la boucle la plus  externe  (la  boucle  « au  som‐
                  met »). La valeur renvoyée est 0, à moins que l’interpréteur ne soit pas en train d’exécuter une boucle
                  lorsqu’il rencontre l’instruction continue.
    :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

  9. #29
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    ok, et avec un exemple ca donnerai quoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i in 1 2 3 4 ;do
     echo $i
     n
    done
    ???

  10. #30
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Citation Envoyé par arnaudperfect
    ok, et avec un exemple ca donnerai quoi ?

    for i in 1 2 3 4 ;do
    echo $i
    n
    done

    ???
    Exemple pratique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for i in 1 2 3 4 ; do
    	((modulo=i%2))
    	if [[ $modulo != 0 ]] ; then
    		echo "* nombre impair, je continue"
    		continue
    	fi
    	echo "* nombre pair, je cumule ..."
    	((total=total+i))
    done
    echo "* $total"
    Résultat :

    * nombre impair, je continue
    * nombre pair, je cumule ...
    * nombre impair, je continue
    * nombre pair, je cumule ...
    * 6
    Loi de Murphy:
    La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
    La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
    Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.

  11. #31
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    d'accord

    il suffit donc de mettre "continue" pour refaire un tour de boucle dans executer la suite du script contenu dans la boucle... j'ai bien compris ?

  12. #32
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Citation Envoyé par arnaudperfect
    d'accord

    il suffit donc de mettre "continue" pour refaire un tour de boucle SANS executer la suite du script contenu dans la boucle... j'ai bien compris ?

    Tu as tout compris
    Loi de Murphy:
    La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
    La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
    Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.

  13. #33
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    ok, je l'ai utilisé ! nickel ! ca optimise l'execution du script !

    en faite je l'utilise car si jamais je veux ajouter un utilisateur sur le système (avec un fichier de réponse > cat, for) et qu'il est déjà présent, je refais un tour de boucle pour faire l'utilisateur suivant sans passé par les étape de génération d'un mot de passe, addgroup, adduser... ca évite d'avoir des messages de ces deux dernières commandes !

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. duree pour parser un fichier avec un script awk
    Par kass28 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 26/03/2008, 16h35
  2. fonction pour parser un fichier
    Par Dirty Harry dans le forum Langage
    Réponses: 7
    Dernier message: 30/01/2007, 05h13
  3. Réponses: 2
    Dernier message: 14/09/2006, 15h22
  4. problème pour parser un fichier xml avec XML::Simple
    Par black_code dans le forum Modules
    Réponses: 3
    Dernier message: 30/01/2006, 19h32
  5. [SAX] Probleme pour parser un fichier
    Par aymron dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 25/11/2005, 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