Kapws Δημοσ. 27 Ιανουαρίου 2013 Δημοσ. 27 Ιανουαρίου 2013 Καλησπέρα, αντιμετωπίζω πρόβλημα με μία εργασία... Ένα από τα ερωτήματά της είναι ότι έχουμε ένα αρχείο students.txt της μορφής: Kostas Papas Thet 61 98 36 94Fivos Nikopoulos Thet 99 84 99 93Eugenia Tsodoulou Theo 69 87 91 66Giorgos 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.8Col[ 5 ] = 78.5333Col[ 6 ] = 84.8667Col[ 7 ] = 86.0667 Επειδή έχω χαζέψει, μπορώ κάπως να το μετατρέψω αντί να τρέχει όλο το loop, αφού π.χ του δώσω είσοδο "4" να διαβάζει την 4 στήλη και να μου επιστρέφει μόνο γι αυτή τη στήλη του μ.ο.; Σκέφτηκα να αλλάξω το i=4 με κάτι του στυλ $x όπου χ ο αριθμός που θα δίνει ο χρήστης αλλά χωρίς αποτέλεσμα. Ή έστω κάποιος άλλος τρόπος; Ευχαριστώ εκ των προτέρων, Στέφανος
coffeex Δημοσ. 27 Ιανουαρίου 2013 Δημοσ. 27 Ιανουαρίου 2013 awk '{X+=$6} END {print "MO = " X/NR}' students.txt Για την επιλογή της στήλης για το 3 μάθημα (6η στήλη) Προσοχή να μην έχεις κενές γραμμές στο students.txt
Kapws Δημοσ. 28 Ιανουαρίου 2013 Μέλος Δημοσ. 28 Ιανουαρίου 2013 Καταρχάς να σε ευχαριστήσω για την απάντησή σου... Σε περίπτωση που θέλω να δίνει ο χρήστης το μάθημα για να βγει ο μέσος όρος μπορεί να γίνει κάπως έτσι: echo -n "Pio mathima thes? (1-4):"read yc=$(($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 cawk -v c=$1 '{X+=$c} END {print "O MO για το $yο μάθημα είναι: " X/NR}' students.txt Γυρνάω πάλι στο αρχικό λάθος... τί έχω καταλάβει στραβά; χαχαχα
warlock9_0 Δημοσ. 28 Ιανουαρίου 2013 Δημοσ. 28 Ιανουαρίου 2013 εκει που έχει $1 του λέει οτι θα παίρνει την τιμή από το πρώτο όρισμα κάντο $c και θα παίρνει την τιμή που διάβασες στο read
Kapws Δημοσ. 28 Ιανουαρίου 2013 Μέλος Δημοσ. 28 Ιανουαρίου 2013 εκει που έχει $1 του λέει οτι θα παίρνει την τιμή από το πρώτο όρισμα κάντο $c και θα παίρνει την τιμή που διάβασες στο read 'Οντως έχεις δίκιο!!! Είμαι οκ τώρα! Σας ευχαριστώ πάρα πολύ
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα