Προς το περιεχόμενο
Συνδεθείτε  
Kapws

awk simple script

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

Καλησπέρα,

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

Ένα από τα ερωτήματά της είναι ότι έχουμε ένα αρχείο 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 όπου χ ο αριθμός που θα δίνει ο χρήστης αλλά χωρίς αποτέλεσμα.

 

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

 

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

Στέφανος

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
awk '{X+=$6} END {print "MO = " X/NR}' students.txt

Για την επιλογή της στήλης για το 3 μάθημα (6η στήλη)

Προσοχή να μην έχεις κενές γραμμές στο students.txt

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

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

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

 

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

 

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

Εγγραφείτε για έναν νέο λογαριασμό

Σύνδεση

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

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

Χρήσιμες πληροφορίες

Με την περιήγησή σας στο insomnia.gr, αποδέχεστε τη χρήση cookies που ενισχύουν σημαντικά την εμπειρία χρήσης.