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.

#!/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

  1. Contributeur
    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
    1. Modérateur
      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
      1. 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
      2. 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
        0
      3. @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.
        0
      4. 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.
        0