Προς το περιεχόμενο

awk simple script


Kapws

Προτεινόμενες αναρτήσεις

Καλησπέρα,

αντιμετωπίζω πρόβλημα με μία εργασία...

Ένα από τα ερωτήματά της είναι ότι έχουμε ένα αρχείο students.txt της μορφής:

 

Kostas Papas Thet 61 98 36 94
Fivos Nikopoulos Thet 99 84 99 93
Eugenia Tsodoulou Theo 69 87 91 66
Giorgos Tsolis Texn 69 88 99 77

 

Όπου οι 2 πρώτες στήλες είναι το ονομ/νυμο, η 3η ειναι η κατεύθυνση του μαθητή και τα άλλα 4 πεδία είναι βαθμοί σε 4 διαφορετικά μαθήματα.

 

Αυτό που ζητήται είναι να γραφτεί ένα awk script που θα διαβάζει σαν είσοδο κάτι του στυλ "mo 3" και θα πηγαίνει να βγάζει το μ.ο. για όλες τους μαθητές για το 3ο μάθημα.

 

Με τη βοήθεια του θείου γοογλη βρήκα αυτό:

 

awk '{   for (i=1; i<=NF; i++) { sum+= $i }   }
END { for (i=4; i<=NF; i++ ) { print "Col[", i, "] =", sum/15 } }'  students.txt

 

το οποίο δίνει αποτέλεσμα του μ.ο. σε ένα print για το κάθε μάθημα με τη μορφή:

Col[ 4 ] = 82.8
Col[ 5 ] = 78.5333
Col[ 6 ] = 84.8667
Col[ 7 ] = 86.0667
 

 

Επειδή έχω χαζέψει, μπορώ κάπως να το μετατρέψω αντί να τρέχει όλο το loop, αφού π.χ του δώσω είσοδο "4" να διαβάζει την 4 στήλη και να μου επιστρέφει μόνο γι αυτή τη στήλη του μ.ο.;

Σκέφτηκα να αλλάξω το i=4 με κάτι του στυλ $x όπου χ ο αριθμός που θα δίνει ο χρήστης αλλά χωρίς αποτέλεσμα.

 

Ή έστω κάποιος άλλος τρόπος;

 

Ευχαριστώ εκ των προτέρων,

Στέφανος

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Καταρχάς να σε ευχαριστήσω για την απάντησή σου...

Σε περίπτωση που θέλω να δίνει ο χρήστης το μάθημα για να βγει ο μέσος όρος μπορεί να γίνει κάπως έτσι:

 

echo -n "Pio mathima thes? (1-4):"
read y
c=$(($y+3))
awk '{X+=$c} END {print "MO = " X/NR}' students.txt  

 

(Δηλαδή να επιλέγει ο χρήστης π.χ. το 3ο μάθημα και μετά να πάει να εκχωρεί την τιμή της c στη συνθήκη μέσα στην awk και να βγάζει το αντίστοιχο αποτέλεσμα)

 

 

Edit: Με μία λίγη αναζήτηση βρήκα ότι το:

 

awk -v c=$1 '{X+=$c} END {print "O MO για το $yο μάθημα είναι: " X/NR}' students.txt

 

Μου δίνει το επιθυμητό αποτέλεσμα εάν πάρει εξωτερική μεταβλητή (καλώντας δλδ "sh script.sh 5" ώστε να βγάλει τον ΜΟ για το 2 μάθημα), αλλά όταν προσπαθώ να πάρω τη μεταβλητή μέσα από read ώστε να τη δώσει ο ίδιος ο χρήστης μετά από promt κάπως έτσι:

 

echo "Dwse noumero"
read c
awk -v c=$1 '{X+=$c} END {print "O MO για το $yο μάθημα είναι: " X/NR}' students.txt  

 

Γυρνάω πάλι στο αρχικό λάθος... τί έχω καταλάβει στραβά;  χαχαχα

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

εκει που έχει $1 του λέει οτι θα παίρνει την τιμή από το πρώτο όρισμα

κάντο $c και θα παίρνει την τιμή που διάβασες στο read

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

εκει που έχει $1 του λέει οτι θα παίρνει την τιμή από το πρώτο όρισμα

κάντο $c και θα παίρνει την τιμή που διάβασες στο read

 

'Οντως έχεις δίκιο!!! Είμαι οκ τώρα! Σας ευχαριστώ πάρα πολύ :)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...