, wenn ich meine testing.sh Datei ausführenSortierung 3 Spalten und bekommen die durchschnittliche
#!/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
ich die folgenden Fehler.
expr: non-integer argument
expr: syntax error
Ich bin mir nicht sicher, was ich falsch mache. Ich habe auch versucht, echo, awk und bc, aber ich habe ähnliche Fehler für alle von ihnen.
ich führen Sie die Datei wie folgt aus:
/testing.sh /home/user/Desktop/sample.txt
Dies ist der Beispieltext.
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 Forester 85 80 82
928441032 Chris Forester 97 94 89
Wenn ich mein Programm ausführen, sollte dies der Ausgang sein:
71 [299226663] Camp, Laney
80 [434401929] Camp, Skyler
81 [199144454] Camp, Tracey
93 [928441032] Forester, Chris
82 [928441032] Forester, Jess
92 [888111818] Forney, JC
82 [123456789] Johnson, Lee
99 [290010111] Lee, Terry
91 [999999999] Smith, Jaime
fein hier mit Ihren Daten arbeiten. Können Sie $ S1, $ S2, $ S3 ausgeben? –
@ Jean-FrançoisFabre, wenn ich sie selbst austeile, bekomme ich. ungültige Zahl 6: printf: 90 für die Zahlen in der letzten Spalte (die 90 ändert sich für die Werte jeder Zeile). – ellsusan
Wenn Ihre Dateien die MS Windows-Umgebung durchlaufen haben, bestätigen Sie, dass sie '\ r \ n' Zeilenenden haben, indem Sie' cat -vet myScript.sh myData.txt' verwenden. Wenn Sie '^ M $' am Ende der Zeile sehen, haben Sie '\ r \ n' Zeilenenden. Verwende 'dos2unix myScript.sh myData.txt', um sie zu bereinigen. Viel Glück. – shellter