Importer des fichiers csv dans un tableau en shell
Résoluzipe31 Messages postés 34620 Date d'inscription Statut Contributeur Dernière intervention -
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
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.
-
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-
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 -
-
-
-
-
-
-
-
-
#!/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 -
-
-