Importer des fichiers csv dans un tableau en shell

Résolu/Fermé
loulou - Modifié le 27 mars 2018 à 11:30
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 30 mars 2018 à 16:13
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

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
27 mars 2018 à 14:19
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
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié le 28 mars 2018 à 07:15
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
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
Dubcek je le confirme cela ne fonctionne pas pour plusieurs lignes. Et les résultats ne sont pas dans un tableau.
0
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
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
28 mars 2018 à 12:08
la 2ème solution ?
0
UnGnU Messages postés 1158 Date d'inscription lundi 2 mai 2016 Statut Contributeur Dernière intervention 22 décembre 2020 157
27 mars 2018 à 12:12
Bonjour,

C'est si compliqué que ça de chercher un minimum ?
0
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
UnGnU Messages postés 1158 Date d'inscription lundi 2 mai 2016 Statut Contributeur Dernière intervention 22 décembre 2020 157 > loulou
27 mars 2018 à 12:25
Si tu as cherché comme tu dis, commence par nous montrer ce que tu as fait...
0
#!/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
UnGnu, S'il vous plaît vous avez une idée?
0
UnGnU Messages postés 1158 Date d'inscription lundi 2 mai 2016 Statut Contributeur Dernière intervention 22 décembre 2020 157 > loulou
28 mars 2018 à 11:43
La solution de dubcek ne te convient pas ?
0