Importer des fichiers csv dans un tableau en shell

Résolu
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. 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. 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. 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. Dubcek je le confirme cela ne fonctionne pas pour plusieurs lignes. Et les résultats ne sont pas dans un tableau.
      0
    4. 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. la 2ème solution ?
      0
  2. Contributeur
    Bonjour,

    C'est si compliqué que ça de chercher un minimum ?
    0
    1. 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. Contributeur
      @loulouSi tu as cherché comme tu dis, commence par nous montrer ce que tu as fait...
      0
    3. #!/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. UnGnu, S'il vous plaît vous avez une idée?
      0
    5. Contributeur
      @loulouLa solution de dubcek ne te convient pas ?
      0