Διαδρομές
/
AWK
AWK
/
Ασκήσεις
/
Απλή αναφορά
Απλή αναφορά

Απλή αναφορά

Άσκηση εκμάθησης

Εισαγωγή

Αριθμοί και συμβολοσειρές

Η AWK είναι μια πολύ μικρή γλώσσα και έχει μόνο λίγους βασικούς τύπους δεδομένων. Σε αυτή την ενότητα θα δούμε αριθμούς και συμβολοσειρές.

Αριθμοί

Οι αριθμοί στην AWK υλοποιούνται ως αριθμοί κινητής υποδιαστολής διπλής ακρίβειας. Δεν γίνεται διάκριση μεταξύ ακεραίων, αριθμών κινητής υποδιαστολής μονής και διπλής ακρίβειας.

Η AWK κατανοεί σταθερές οκταδικών αριθμών (που ξεκινούν με 0) και σταθερές δεκαεξαδικών αριθμών (που ξεκινούν με 0x ή 0X).

Αριθμητικές πράξεις

Μπορείς να χρησιμοποιήσεις τους συνήθεις αριθμητικούς τελεστές +, -, *, /, %. Ο τελεστής ύψωσης σε δύναμη είναι ο ^. Υπάρχουν μερικές ενσωματωμένες αριθμητικές συναρτήσεις, όπως τριγωνομετρικές συναρτήσεις, παραγωγή τυχαίων αριθμών, και η int(x) που κόβει έναν αριθμό στον κοντινότερο ακέραιο μεταξύ του x και του μηδενός.

Συμβολοσειρές

Οι συμβολοσειρές στην AWK είναι ακολουθίες χαρακτήρων. Όρισε μια σταθερά συμβολοσειράς χρησιμοποιώντας διπλά εισαγωγικά.

Πράξεις συμβολοσειρών

Υπάρχει μόνο μία πράξη συμβολοσειρών: η συνένωση. Η συνένωση δεν έχει ειδικό τελεστή· απλώς τοποθετώντας δύο συμβολοσειρές τη μία δίπλα στην άλλη τις συνενώνεις:

BEGIN {
    hw = "Hello" "World"
    print hw
}
# => HelloWorld
Note

Το print είναι εντολή, όχι συνάρτηση. Το print δεν απαιτεί παρενθέσεις.

Η AWK έχει πλήθος συναρτήσεων χειρισμού συμβολοσειρών. Θα τις γνωρίσουμε σε βάθος καθώς προχωράμε στη διαδρομή.

Μετατροπή μεταξύ αριθμών και συμβολοσειρών

Δεν υπάρχουν ρητοί τελεστές για μετατροπή μεταξύ αριθμών και συμβολοσειρών. Η AWK κάνει αυτή τη μετατροπή έμμεσα, με βάση τα συμφραζόμενα του προγράμματος. Αυτό κάνει την εργασία με τιμές πεδίων εισόδου πολύ απλή: η AWK γενικά κάνει απλώς αυτό που θέλεις.

  • Το print x + y θα μετατρέψει τις τιμές των μεταβλητών x και y σε αριθμούς χάρη στην αριθμητική πράξη +.
  • Το print x y θα μετατρέψει τις τιμές των μεταβλητών x και y σε συμβολοσειρές χάρη στην πράξη της συνένωσης.

Αν θέλεις να είσαι ρητός, το 0 + x δίνει την αναπαράσταση του x ως αριθμό και το "" x δίνει την αναπαράσταση του x ως συμβολοσειρά.

Από συμβολοσειρές σε αριθμούς

Ο τρόπος με τον οποίο η AWK μετατρέπει μια συμβολοσειρά σε αριθμό μπορεί να είναι μπερδεμένος. Ένας απλός τρόπος να το σκεφτείς είναι ότι η AWK διαβάζει "αριθμητικούς χαρακτήρες" από την αρχή μιας συμβολοσειράς μέχρι να βρει έναν "μη αριθμητικό" χαρακτήρα. Μερικά παραδείγματα είναι:

  • Το "2.5" μετατρέπεται στον αριθμό 2.5;
  • Το "1e3" μετατρέπεται στον αριθμό 1000 (επιστημονική σημειογραφία);
  • Το "456abc" μετατρέπεται στον αριθμό 456 (επειδή το a δεν είναι "ψηφίο", η μετατροπή σταματά εκεί).
  • Το "abc789" μετατρέπεται στον αριθμό 0 (δεν υπάρχουν αριθμοί στην αρχή της συμβολοσειράς).

Οδηγίες

Βοηθάς έναν φίλο να δημιουργήσει μια αναφορά από μετρήσεις που έχει πάρει σε διάφορες γωνιές του κήπου του. Δυστυχώς, ο φίλος σου έχει αποθηκεύσει τα δεδομένα σε μια περίεργη μορφή. Κάθε μέτρηση είναι ένα σύνολο πεδίων χωρισμένων με κόμμα. Ωστόσο, έχει αποθηκεύσει διψήφιους αριθμούς σε δύο στήλες.

αριθμός πεδίου σημασία
1 αριθμός αναγνώρισης
2 τοποθεσία
3 πρώτη μέτρηση, ψηφίο δεκάδων
4 πρώτη μέτρηση, ψηφίο μονάδων
5 δεύτερη μέτρηση, ψηφίο δεκάδων
6 δεύτερη μέτρηση, ψηφίο μονάδων

Για μια γραμμή εισόδου όπως η 101,house,4,2,5,4

  • η πρώτη μέτρηση είναι 42,
  • η δεύτερη μέτρηση είναι 54.

Εργασία 1: Δημιούργησε την αναφορά

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

#<id>, <label> = <average>

Εφόσον ο μέσος όρος του 42 και του 54 είναι 48, η έξοδος για τη γραμμή του παραδείγματος θα πρέπει να είναι:

#101, house = 48
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
AWK Exercism

Έτοιμος να ξεκινήσεις την άσκηση Απλή αναφορά;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις AWK με 3 έννοιες92 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.