Importer des fichiers csv dans un tableau en shell

Résolu
loulou -  
zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'ai besoin de votre aide car je suis totalement perdu.
J'ai un certains nombre de fichers.csv.
Je dois écrire un script qui cherchera dans le sous-répertoire tous les fichiers et qui les mettra dans d’un tableau.. Chaque fichiers csv doit se retrouver dans une case du tableau.

Quelqu'un pour m'orienter???

merci

2 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    1 fichier par élément du tableau
    $ ls *csv
    f1.csv f2.csv f3.csv
    $ more *csv
    ::::::::::::::
    f1.csv
    ::::::::::::::
    a;b;c;d
    ::::::::::::::
    f2.csv
    ::::::::::::::
    1;2;3;4
    ::::::::::::::
    f3.csv
    ::::::::::::::
    1000;1001;1002;1003;1004
    $ readarray -t t < <(cat *csv)
    $ echo ${#t[@]}
    3
    $ printf "%s\n" "${t[@]}"
    a;b;c;d
    1;2;3;4
    1000;1001;1002;1003;1004
    1
    1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      ne fonctionne pas avec des fichiers multilignes, je regarde
      $ more *.csv
      ::::::::::::::
      f1.csv
      ::::::::::::::
      a;b;c;d
      e;f;g;h
      ::::::::::::::
      f2.csv
      ::::::::::::::
      1;2;3;4
      5;6;7;8
      ::::::::::::::
      f3.csv
      ::::::::::::::
      1000;1001;1002;1003;1004
      2000;2001;2002;2003;2004
      $ unset t; for f in *.csv; do t[${#t[@]}]=$(cat $f); done
      $ echo ${#t[@]}
      3
      $ echo "${t[0]}"
      a;b;c;d
      e;f;g;h
      $ echo "${t[1]}"
      1;2;3;4
      5;6;7;8
      $ echo "${t[2]}"
      1000;1001;1002;1003;1004
      2000;2001;2002;2003;2004
      0
    2. loulou
       
      Bonjour Dubcek,

      Je vous remercie pour votre aide. Je vais tester cela et essayer de compléter pour voir si cela fonctionne.

      Je vous tiens informé.

      Merci
      0
    3. loulou
       
      Dubcek je le confirme cela ne fonctionne pas pour plusieurs lignes. Et les résultats ne sont pas dans un tableau.
      0
    4. loulou
       
      dubcek, j'ai parlé trop vite, le code il fonctionne. mais je voudrais savoir si je peux rajouter le chemin d'un répertoire dans cette commande.


      unset t; for f in *.csv; do t[${#t[@]}]=$(cat $f); done

      Car mes fichiers sont dans un sous répertoire et il ne me les trouve pas.
      0
    5. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      la 2ème solution ?
      0
  2. UnGnU Messages postés 1468 Statut Contributeur 158
     
    Bonjour,

    C'est si compliqué que ça de chercher un minimum ?
    0
    1. loulou
       
      wowww je m'attendais à tout mais pas à cela.
      Parce que vous pensez que demandé de l'aide signifie qu'on a pas chercher!!!! c'est un peu limite comme raisonnement.
      0
    2. UnGnU Messages postés 1468 Statut Contributeur 158 > loulou
       
      Si tu as cherché comme tu dis, commence par nous montrer ce que tu as fait...
      0
    3. loulou
       
      #!/bin/bash

      set Tableau


      awk 'BEGIN { FS=" " }
      {ligne [NR] = $0
      ref1 [NR] = $2
      ref2 [NR] = $3
      ref3 [NR] = $4 ## mon fichier à 4 lignes
      }
      END {
      print NF
      print NR

      for ( i = 1 ; i <= NR ; i++ ){ printf( Tableau=ligne ) }

      } ' fic1.csv

      cette commande awk , récupère dans un premier temps toutes les lignes de fichier.csv en les mettant dans le tableau . puis après imprime à l'écran toute les lignes du fichier .
      Suis-je sur la bonne voie???

      L'objectif pour moi étant de concaténer le contenu du tableau par la suite.



      Ps: j'ai plusieurs fichiers
      0
    4. loulou
       
      UnGnu, S'il vous plaît vous avez une idée?
      0
    5. UnGnU Messages postés 1468 Statut Contributeur 158 > loulou
       
      La solution de dubcek ne te convient pas ?
      0