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

Résumé de la discussion

Plusieurs échanges portent sur la création d'un script pour collecter des fichiers CSV situés dans les sous-répertoires et les placer dans un tableau, avec chaque fichier occupant une case distincte. Des propositions utilisent des commandes Bash simples comme for f in *.csv et l'affectation des noms de fichiers dans un tableau, parfois en récupérant aussi le contenu des fichiers ou en utilisant readarray. D'autres échanges évoquent des variantes et soulignent qu'une solution peut échouer avec des fichiers multi-lignes et que Windows peut nécessiter Powershell ou des outils équivalents. En cas de besoin, la discussion met en avant que le choix entre noms de fichiers et contenus est crucial et que la gestion des CSV multi-lignes demande une approche adaptée.

Bobot (l'IA à votre service)
  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