J’ai une betise dans mon code. Pouvez vous m’aider a le corriger?
je cherche à créer un fichier en récupérant le nom dans un autre fichier qui contient une liste.
[code]csv_DirectoryLocation=$(pwd)
echo -n "Le fichier liste des groupes se trouve-t-il dans le répertoire suivant? \n $csv_DirectoryLocation : [Oui] ou [Non]"
read answer_fg #Chargement du chemin d’acces au fichier CSV dans la variable “csv_location”. Le fichier CSV doit s’appeler “import_regie.csv” => Si non, fonctionne pas.
case $answer_fg in
Oui|OUI|oui|O|o ) fichier_groupe=$csv_DirectoryLocation/fichier_groupe.csv
echo “Le fichier se trouve dans: $fichier_groupe”;;
Non|NON|non|N|n ) echo -n "Dans quel répertoire se trouve le fichier fichier_groupe.csv?\n"
read csv_EntryLocation
fichier_groupe=$csv_EntryLocation/fichier_groupe.csv
echo “Le fichier se trouve donc bien dans: $fichier_groupe\n”;;
*) "Au revoir…\n"
exit 1 ;;
esac
echo $csv_DirectoryLocation
nbr_ligne_groupe=awk 'END {print NR}' $fichier_groupe)
groupe=awk -F ";" -v num_ligne=$nbr_ligne_groupe 'NR == num_ligne { printf $NF }' $fichier_groupe
echo $groupe
echo $csv_DirectoryLocation
fichier_destination=$csv_DirectoryLocation/$groupe & ".csv"
echo $fichier_destination
touch $fichier_destination[/code]
Bon je sais le code est horrible mais je fais ce que je peux avec le peu de connaissance que j’ai. Le code va évoluer car j’ai en fait besoin de créer autant de fichier que de ligne lu dans "fichier_groupe.csv"
je ferai ça avec une boucle while.
Donc pour l’instant je veux juste régler mon problème de création de fichier sachant qu’en faisant comme ça, le fichier créer est un fichier dont le nom contient un retour chariot (retour à la ligne).
Je veux que mon fichier soit du type: nom_lu.csv
Merci pour votre aide.
Au fait, j’en profite pour demander si quelqu’un connait un bon bouquin pour apprendre le script shell?
dans ton code, seule la dernière ligne est lue :nbr_ligne_groupe=`awk 'END {print NR}' $fichier_groupe)`
de plus, plus haut dans le script, si l’utilisateur répond « non », le nom de la variable fournie doit rester le même : csv_DirectoryLocation
enfin, entre autres, `fichier_destination=$csv_DirectoryLocation/$groupe & « .csv »’ ceci n’est pas correct, et devrait afficher une erreur : les " & " sont de trop.
echo -n "Le fichier liste des groupes se trouve-t-il dans le répertoire suivant? \n $csv_DirectoryLocation : [Oui] ou [Non]"
read answer_fg #Chargement du chemin d’acces au fichier CSV dans la variable “csv_location”. Le fichier CSV doit s’appeler “fichier_groupe.csv” => Si non, fonctionne pas.
case $answer_fg in
Oui|OUI|oui|O|o ) fichier_groupe=$csv_DirectoryLocation/fichier_groupe.csv
echo “1. Le fichier se trouve dans: $fichier_groupe”;;
Non|NON|non|N|n ) echo -n "Dans quel répertoire se trouve le fichier fichier_groupe.csv?\n"
read csv_EntryLocation
fichier_groupe=$csv_EntryLocation/fichier_groupe.csv
echo “Le fichier se trouve donc bien dans: $fichier_groupe\n”;;
*) "Au revoir…\n"
exit 1 ;;
esac
echo "2. $csv_DirectoryLocation"
nbr_ligne_groupe=awk 'END {print NR}' $fichier_groupe
echo "3. $nbr_ligne_groupe"
groupe=awk -F ";" -v num_ligne=$nbr_ligne_groupe 'NR == num_ligne { print $NF }' $fichier_groupe
echo "4. $groupe"
echo “5. $csv_DirectoryLocation"
fichier_destination=”$csv_DirectoryLocation/$groupe.csv"
echo $fichier_destination
touch $fichier_destination[/code]
Voici le résultat une fois lancé.
[code]~/Documents$ ./tiers_csv.sh
Le fichier liste des groupes se trouve-t-il dans le répertoire suivant? \n /home/user/Documents : [Oui] ou [Non]o
Le fichier se trouve dans: /home/user/Documents/fichier_groupe.csv
/home/user/Documents
59
2014_utilisateurs_89
/home/user/Documents
.csve/user/Documents/2014_utilisateurs_89
[/code]
Ce qui m’intéresse dans la correction est la correction de la ligne apres le "5. /home/user/Documents"
Je veux que cette ligne soit comme ca: “home/user/Documents/2014_utilisateurs_89.csv”
Quand je fait un ls -l, j’obtiens:
:~/Documents$ ls -l
total 72540
-rw-r--r-- 1 user user 0 nov. 25 17:25 2014_utilisateurs_90?.csv
Je ne sais pas pourquoi il y a un caractère spéciale entre le “90” et “.csv”???
[quote=« vandman »]…Ce qui m’intéresse dans la correction est la correction de la ligne apres le « 5. /home/user/Documents »…[/quote]Essaie ces lignes de commandes dans un terminal :csv_DirectoryLocation="/home/user/Documents"
echo $csv_DirectoryLocationcsv_DirectoryLocation="/home/user/Documents"
csv_DirectoryLocation=${csv_DirectoryLocation#/}
echo $csv_DirectoryLocation
NOTE: S’il n’existe pas, il te faudra créer le répertoire contenant avant de pouvoir y créer des fichiers avec [mono]touch[/mono] (ou autre)
Par exemple, si le répertoire [mono]home/user/Documents[/mono] n’existe pas, la commande [mono]touch home/user/Documents/fichTest[/mono] retournera :
Il faudra d’abord créer le répertoire contenant : [mono]home/user/Documents/[/mono] avec la commande :mkdir -p home/user/Documents/
=======[quote]…Je ne sais pas pourquoi il y a un caractère spéciale entre le “90” et “.csv”???…[/quote]Histoire de savoir de quel code de caractère il s’agit, essaie de voir avec [mono]hexdump[/mono]
[quote=“vandman”]…Désolé, je n’ai pas été assez précis?…[/quote]Ça me rassure : je ne suis donc pas le seul…
=======
J’ai enlevé une étoile en trop dans mon message précédent : [mono]${csv_DirectoryLocation#/}[/mono] au lieu de [mono][strike]${csv_DirectoryLocation#/*}[/strike][/mono]
cat -A fichier_groupe.csv
Code dM-CM-)partement;Nom du dM-CM-)partement;nombres utilisateurs;Liste des groupes^M$
01;Ain;1M-BM- 499;2014_utilisateurs_01^M$
02;Aisne;1M-BM- 455;2014_utilisateurs_02^M$
et