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