Problème avec la commande AWK
Résolu
Bonjour,
Après avoir fait un script Shell permettant de renseigner des notes pour des élèves dans un fichier csv. J'aimerais séparer les différents champs pour les mettre dans des colonnes séparées.
Actuellement j'ai toutes mes informations dans la même case quand j'ouvre un excel ce qui rend la chose illisible au possible.
J'ai commencer à chercher une solution mais je ne trouve pas grand chose.
Après avoir fait un script Shell permettant de renseigner des notes pour des élèves dans un fichier csv. J'aimerais séparer les différents champs pour les mettre dans des colonnes séparées.
Actuellement j'ai toutes mes informations dans la même case quand j'ouvre un excel ce qui rend la chose illisible au possible.
J'ai commencer à chercher une solution mais je ne trouve pas grand chose.
#!/bin/bash
clear
eleve=$1
classe=$2
while [[ -z $eleve ]] || [[ $eleve -eq "${eleve##[0-9]*}" ]]
do
read -p 'Il faut un nombre délèves valide : ' eleve
done
for (( i=1; i <= $eleve; i++ ))
do
read -p 'Il faut une note entre 0 et 20 : ' note
while [[ -z $note ]] || [[ $note -gt 20 ]] || [[ $note -eq "${note##[0-9]*}" ]]
do
read -p 'Mets une note entre 0 et 20 ! : ' note
done
read -p 'Pouvez vous me donner un prénom : ' prenom
read -p 'Pouvez vous me donner un nom : ' nom
if [ 18 -le "$note" ]; then
resultat="Parfait"
elif [ 16 -le "$note" ]; then
resultat="Très bien"
elif [ 14 -le "$note" ]; then
resultat="Bien"
elif [ 11 -le "$note" ]; then
resultat="Assez bien"
elif [ "$note" -lt 11 ] && [ "$note" -ge 0 ]; then
resultat="Insuffisant"
elif [ "$note" -lt 0 ]; then
echo "Vous ne pouvez pas avoir en dessous de 0"
fi
echo "L'élève n°"$i": "$nom $prenom" a eu cette note: "$note". C'est "$resultat.
#echo $prenom >> notes.csv; echo $nom >> notes.csv ; echo $note >> notes.csv; echo $resultat >> notes.csv
echo $prenom,$nom,$note,$resultat >> notes.csv | awk -F"," '{echo $1 " " $2 "," $3 " " $4 " " $5 "," $7}'
done
Configuration: Windows / Chrome 78.0.3904.87
2 réponses
-
ContributeurSalut,
Et si tu nous montrais ce que tu as comme résultat dans ton fichier et ce que tu attends.
La commande awk est inutile !
les commandes echo et printf peuvent faire ce que tu attends.
-
ModérateurBonjour,
Un fichier .csv c'est un fichier avec des champs séparés par un ";"
Il suffit peut être de faire :echo $prenom";"$nom";"$note";"$resultat >> notes.csv
-
-
Contributeur@BojaminJuste pour info… Pas la peine de mettre 36000 guillemets, deux suffisent. Et tant qu'à faire autant prendre de bonnes habitudes et encadrer les variables par des "{}' !
echo "${prenom};${nom};${note};${resultat}" >> notes.csv -
@zipe31D'accord merci.
J'avoue faire du shell une fois toute les deux semaines histoire de tester des technos que je ne connais pas bien.
Toujours bon à noter ce genre de commandes. -
Modérateur@zipe31Oui moi aussi je fais du shell une fois tou ...s les 2 ans ;-)
Heureusement notre ami zipe est là pour les bonnes pratiques.
-