Tri de 3 colonnes et obtention de la moyenne

quand je lance mon fichier testing.sh

#!/bin/bash FILE=$1 COUNT=0 while read -r SID FIRST LAST S1 S2 S3 do SUM=$(expr $S1 + $S2 + $S3) AVG=$(expr $SUM / 3) printf '%d [%d] %s, %s\n' "$AVG" "$SID" "$LAST" "$FIRST" done < "$FILE" | sort -k 3,3n -k 4,4n -k 2,2g 

Je reçois les erreurs suivantes.

 expr: non-integer argument expr: syntax error 

Je ne suis pas sûr de ce que je fais mal. J’ai aussi essayé echo, awk et bc mais j’ai eu des erreurs similaires pour tous.

Je lance le fichier comme ceci:

/testing.sh /home/user/Desktop/sample.txt

Ceci est l’exemple de texte.

 123456789 Lee Johnson 72 85 90 999999999 Jaime Smith 90 92 91 888111818 JC Forney 100 81 97 290010111 Terry Lee 100 99 100 199144454 Tracey Camp 77 84 84 299226663 Laney Camp 70 74 71 434401929 Skyler Camp 78 81 82 928441032 Jess Forestr 85 80 82 928441032 Chris Forestr 97 94 89 

Lorsque je lance mon programme, cela devrait être le résultat:

 71 [299226663] Camp, Laney 80 [434401929] Camp, Skyler 81 [199144454] Camp, Tracey 93 [928441032] Forestr, Chris 82 [928441032] Forestr, Jess 92 [888111818] Forney, JC 82 [123456789] Johnson, Lee 99 [290010111] Lee, Terry 91 [999999999] Smith, Jaime 

Votre S3 ne contient pas réellement une valeur telle que 90 , mais contient des valeurs telles que 90$'\r' , car votre fichier d’entrée comporte des lignes CRLF (DOS) plutôt que LF (UNIX). Cela se produit le plus souvent si vous avez obtenu votre fichier d’entrée depuis un système non UNIX.

Corrigez le fichier en utilisant des outils tels que dos2unix ou la commande vim :set fileformat=unix ou utilisez le code suivant dans votre script:

 S3=${S3%$'\r'} # remove any trailing $'\r' from S3