Problème avec la commande AWK

Résolu/Fermé
Bojamin - Modifié le 18 févr. 2020 à 11:19
jee pee Messages postés 40590 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 24 décembre 2024 - 18 févr. 2020 à 12:39
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.

#!/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
A voir également:

2 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
Modifié le 18 févr. 2020 à 11:22
Salut,

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.

0
jee pee Messages postés 40590 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 24 décembre 2024 9 462
18 févr. 2020 à 11:25
Bonjour,

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



0
Merci pour vos retours rapide.
Effectivement ta solution à marché merci.
Bon j'ai un problème d'UTF-8 mais je devrais pouvoir régler cela assez rapidement.
Belle journée à vous deux.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419 > Bojamin
18 févr. 2020 à 11:33
Juste 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
0
Bojamin > zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021
18 févr. 2020 à 11:47
D'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.
0
jee pee Messages postés 40590 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 24 décembre 2024 9 462 > zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021
18 févr. 2020 à 12:39
Oui moi aussi je fais du shell une fois tou ...s les 2 ans ;-)

Heureusement notre ami zipe est là pour les bonnes pratiques.
0