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 :

Awk: récupérer les variables dans un fichier csv.


Sujet :

Shell et commandes GNU

  1. #1
    Membre actif

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 371
    Points : 276
    Points
    276
    Par défaut Awk: récupérer les variables dans un fichier csv.
    Bonjour,

    Je voudrais savoir comment calculer le nombre de variable que j'ai dans une ligne d'un fichier csv.
    ex: prénom;nom;adresse;codepostal;telephone;adressecomp; => 6 champs.
    Je veux aussi pouvoir récupérer chaque champs pour lancer une recherche SQL. Le nombre de champ peut varier, c'est pour ça que j'ai besoin de savoir combien j'en ai.

    faire un truc du type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for $nombre_champ>0
    do
    nom_champ=`echo $ligne | awk -F";" '{ print $nombre_champ }'`
    psql my_db << EOF
    SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS where COLUMN_NAME=$nom_champ;
    EOF
    nombre_champ=$nombre_champ - 1
    done
    Idéalement, je voudrais stoquer les résultats dans un fichier csv pour pouvoir le lire dans calc. Mais ceci fera l'objet d'une autre question, je pense.

    Comment commencer mon projet pour récupérer le nombre de champs, lire chaque champ et exécuter ma recherche sql?

    Merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 102
    Points : 28 394
    Points
    28 394
    Par défaut
    La variable NF dans awk te retourne le nombre de champs de la ligne en cours.

  3. #3
    Membre actif

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 371
    Points : 276
    Points
    276
    Par défaut
    J'ai fait le test, NF retourne le nombre de ligne pas de champs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    num_colonne=`echo $ligne | awk -F";" '{ print NF }'`
    Le résultat est 1

    Je n'ai pas trouvé d'info sur internet sur comment faire. Je deviens fou...
    A croire que personne n'a deja fait ca???

    Cordialement,

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

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo "prénom;nom;adresse;codepostal;telephone;adressecomp;" | awk -F';' '{print NF}'
    7

  5. #5
    Membre actif

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 371
    Points : 276
    Points
    276
    Par défaut
    Comment faire quand les données viennent d'un fichier csv?

  6. #6
    Membre actif

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 371
    Points : 276
    Points
    276
    Par défaut
    J'ai trouvé:

    il faut lancer ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat fichier.csv |  awk -F";" '{ print NF }'
    Sachant que mon fichier n'a qu'une ligne. Sinon, faire ceci dans un fichier.sh:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    num_ligne=1
    cat fichier.csv |while read ligne
    do
        echo $ligne
        nbr_champs=`echo $ligne | awk -F";" '{ print NF }'`
        echo "Il y a $nbr_champs champs dans la ligne $num_ligne "
        num_ligne=$num_ligne+1
    done

  7. #7
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    Citation Envoyé par vandman Voir le message
    J'ai trouvé:

    il faut lancer ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat fichier.csv |  awk -F";" '{ print NF }'
    "Tu as trouvé", c'est vite dit, utiliser NF t'a déjà été suggéré deux fois.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    num_ligne=1
    cat fichier.csv |while read ligne
    do
        echo $ligne
        nbr_champs=`echo $ligne | awk -F";" '{ print NF }'`
        echo "Il y a $nbr_champs champs dans la ligne $num_ligne "
        num_ligne=$num_ligne+1
    done
    C'est lourd, tu peux faire tout ça en une ligne awk:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F";" '{printf("%s\nIl y a %d champs dans la ligne %d\n",$0,NF,NR)}' fichier.csv

  8. #8
    Membre actif

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 371
    Points : 276
    Points
    276
    Par défaut
    Merci.

    C'est plus beau comme tu me l'a indiqué.
    De plus, je commence tout juste à mieux comprendre l'utilisation de awk.

    Cordialement,

    Vandman

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

Discussions similaires

  1. Réponses: 24
    Dernier message: 25/09/2007, 11h53
  2. Réponses: 9
    Dernier message: 21/05/2007, 00h33
  3. Récupérer les variables dans une popup
    Par Msieurduss dans le forum Langage
    Réponses: 4
    Dernier message: 21/08/2006, 20h05
  4. Sauvegarder les données dans un fichier CSV
    Par beb30 dans le forum MFC
    Réponses: 5
    Dernier message: 08/03/2006, 13h06
  5. [](VB) Récupérer les données dans un fichier .xml
    Par Furius dans le forum VBScript
    Réponses: 4
    Dernier message: 02/10/2005, 20h39

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