- ΣΥΝΤΑΞΗ
- ΔΙΑΒΑΣΤΕ ΠΡΩΤΑ
- ΠΕΡΙΓΡΑΦΗ
- ΠΡΟΛΟΓΟΣ
- ΜΟΡΦΗ ΕΠΙΛΟΓΗΣ
- ΕΠΙΛΟΓΕΣ
- ΕΚΤΕΛΕΣΗ ΠΡΟΓΡΑΜΜΑΤΟΣ AWK
- ΜΕΤΑΒΛΗΤΕΣ, ΕΓΓΡΑΦΕΣ ΚΑΙ ΠΕΔΙΑ
- ΜΟΤΙΒΑ ΚΑΙ ΕΝΕΡΓΕΙΕΣ
- ΣΥΝΑΡΤΗΣΕΙΣ ΟΡΙΣΜΕΝΕΣ ΑΠΟ ΤΟΝ ΧΡΗΣΤΗ
- ΔΥΝΑΜΙΚΗ ΦΟΡΤΩΣΗ ΝΕΩΝ ΣΥΝΑΡΤΗΣΕΩΝ
- ΣΗΜΑΤΑ
- ΔΙΕΘΝΟΠΟΙΗΣΗ
- ΕΠΕΚΤΑΣΕΙΣ GNU
- ΜΕΤΑΒΛΗΤΕΣ ΠΕΡΙΒΑΛΛΟΝΤΟΣ
- ΚΑΤΑΣΤΑΣΗ ΕΞΟΔΟΥ
- ΠΛΗΡΟΦΟΡΙΕΣ ΕΚΔΟΣΗΣ
- ΣΥΓΓΡΑΦΕΙΣ
- ΑΝΑΦΟΡΕΣ ΣΦΑΛΜΑΤΩΝ ΚΑΙ ΕΡΩΤΗΣΕΙΣ
- ΣΦΑΛΜΑΤΑ
- ΔΕΙΤΕ ΕΠΙΣΗΣ
- ΠΑΡΑΔΕΙΓΜΑΤΑ
- ΔΙΚΑΙΩΜΑΤΑ ΑΝΤΙΓΡΑΦΗΣ
gawk - γλώσσα σάρωσης και επεξεργασίας προτύπων
ΣΥΝΤΑΞΗ
gawk [ επιλογές στυλ POSIX ή GNU ] -f program-file [ -- ] file ...
gawk [ επιλογές στυλ POSIX ή GNU ] [ -- ] program-text file ...
ΔΙΑΒΑΣΤΕ ΠΡΩΤΑ
Αυτή η σελίδα man παρέχεται ως ευκολία. Σημειώστε ότι η Μοναδική Πηγή Αλήθειας για το gawk είναι το εγχειρίδιο Texinfo, το οποίο είναι διαθέσιμο στο διαδίκτυο σε διάφορες μορφές στη διεύθυνση https://www.gnu.org/software/gawk/manual. Μπορεί επίσης να είναι εγκατεστημένο στο υποσύστημα Info του συστήματός σας και να είναι διαθέσιμο μέσω της εντολής info(1).
Σε περίπτωση οποιασδήποτε αντίφασης μεταξύ του εγχειριδίου Texinfo και αυτής της σελίδας man, το εγχειρίδιο θα πρέπει να θεωρείται ως το έγκυρο.
ΠΕΡΙΓΡΑΦΗ
Το Gawk είναι η υλοποίηση της γλώσσας προγραμματισμού AWK από το GNU Project. Συμμορφώνεται με τον ορισμό της γλώσσας στο πρότυπο POSIX 1003.1. Αυτή η έκδοση, με τη σειρά της, βασίζεται στην περιγραφή στο The AWK Programming Language, των Aho, Kernighan και Weinberger. Το Gawk παρέχει τις πρόσθετες δυνατότητες που βρίσκονται στην τρέχουσα έκδοση του awk του Brian Kernighan και πολλές επεκτάσεις ειδικές για το GNU.
Η γραμμή εντολών αποτελείται από επιλογές για το gawk, το κείμενο του προγράμματος AWK (εάν δεν παρέχεται μέσω των επιλογών -f ή --include) και τιμές που θα διατεθούν στις προκαθορισμένες μεταβλητές AWK ARGC και ARGV.
ΠΡΟΛΟΓΟΣ
Αυτή η σελίδα man είναι σκόπιμα όσο το δυνατόν πιο περιεκτική. Πλήρεις λεπτομέρειες παρέχονται στο GAWK: Effective AWK Programming, και θα πρέπει να ανατρέξετε εκεί για την πλήρη ιστορία για οποιαδήποτε συγκεκριμένη δυνατότητα. Όπου είναι δυνατόν, παρέχονται σύνδεσμοι στην διαδικτυακή έκδοση του εγχειριδίου.
ΜΟΡΦΗ ΕΠΙΛΟΓΗΣ
Οι επιλογές Gawk μπορούν να είναι είτε οι παραδοσιακές επιλογές στυλ POSIX ενός γράμματος, είτε οι επιλογές στυλ GNU. Οι επιλογές POSIX ξεκινούν με ένα μόνο “-”, ενώ οι επιλογές μεγάλου μήκους ξεκινούν με “--”. Οι επιλογές μεγάλου μήκους παρέχονται τόσο για δυνατότητες ειδικές για το GNU όσο και για δυνατότητες που επιβάλλονται από το POSIX.
Οι επιλογές ειδικές για το Gawk χρησιμοποιούνται συνήθως σε μορφή επιλογής μεγάλου μήκους. Τα ορίσματα των επιλογών μεγάλου μήκους είτε συνδέονται με την επιλογή με ένα σημάδι =, χωρίς ενδιάμεσα κενά, είτε μπορεί να παρέχονται στο επόμενο όρισμα της γραμμής εντολών. Οι επιλογές μεγάλου μήκους μπορούν να συντομευθούν, εφόσον η συντομογραφία παραμένει μοναδική.
Επιπλέον, κάθε επιλογή μεγάλου μήκους έχει την αντίστοιχη σύντομη επιλογή της, ώστε η λειτουργικότητα της επιλογής να μπορεί να χρησιμοποιηθεί μέσα σε εκτελέσιμα σενάρια #!.
ΕΠΙΛΟΓΕΣ
Το Gawk δέχεται τις ακόλουθες επιλογές. Οι τυπικές επιλογές παρατίθενται πρώτες, ακολουθούμενες από τις επιλογές για επεκτάσεις gawk, παρατεταγμένες κατά αλφαβητική σειρά με βάση τη σύντομη επιλογή.
-f program-file, --file program-file
Διαβάστε την πηγή του προγράμματος AWK από το αρχείο program-file, αντί από το πρώτο
όρισμα της γραμμής εντολών. Μπορούν να χρησιμοποιηθούν πολλές επιλογές -f. Τα αρχεία που διαβάζονται με το -f αντιμετωπίζονται σαν να ξεκινούν με μια έμμεση δήλωση @namespace "awk".
-F fs, --field-separator fs
Χρησιμοποιήστε το fs ως διαχωριστικό πεδίων εισόδου (την τιμή της προκαθορισμένης μεταβλητής FS).
-v var=val, --assign var=val
Αντιστοιχίστε την τιμή val στη μεταβλητή var, πριν ξεκινήσει η εκτέλεση του προγράμματος. Αυτές οι τιμές μεταβλητών είναι διαθέσιμες στον κανόνα BEGIN ενός προγράμματος AWK.
-b, --characters-as-bytes
Αντιμετωπίστε όλα τα δεδομένα εισόδου ως χαρακτήρες ενός byte. Η επιλογή --posix αντικαθιστά αυτή.
-c, --traditional
Εκτελέστε σε λειτουργία συμβατότητας. Σε λειτουργία συμβατότητας, το gawk συμπεριφέρεται πανομοιότυπα με το awk του Brian Kernighan· καμία από τις συγκεκριμένες επεκτάσεις GNU δεν αναγνωρίζεται.
-C, --copyright
Εμφανίστε την σύντομη έκδοση του μηνύματος πληροφοριών πνευματικών δικαιωμάτων GNU στην τυπική έξοδο και τερματίστε με επιτυχία.
-d[file], --dump-variables[=file]
Εκτυπώστε μια ταξινομημένη λίστα των καθολικών μεταβλητών, των τύπων τους και των τελικών τιμών τους σε ένα αρχείο. Το προεπιλεγμένο αρχείο είναι το awkvars.out στον τρέχοντα κατάλογο.
-D[file], --debug[=file]
Ενεργοποιήστε την αποσφαλμάτωση των προγραμμάτων AWK. Από προεπιλογή, ο αποσφαλματωτής διαβάζει εντολές διαδραστικά από το πληκτρολόγιο (τυπική είσοδος). Η προαιρετική παράμετρος αρχείου καθορίζει ένα αρχείο με μια λίστα εντολών για τον αποσφαλματωτή ώστε να εκτελέσει μη διαδραστικά.
Σε αυτήν τη λειτουργία εκτέλεσης, το gawk φορτώνει τον πηγαίο κώδικα του προγράμματος AWK και, στη συνέχεια, ζητά εντολές αποσφαλμάτωσης. Το Gawk μπορεί να αποσφαλματώσει μόνο τον πηγαίο κώδικα του προγράμματος AWK που παρέχεται με τις επιλογές -f και --include. Ο αποσφαλματωτής είναι τεκμηριωμένος στο GAWK: Effective AWK Programming· δείτε το [https://www.gnu.org/software/gawk/manual/html_node/Debugger.html#Debugger](https://www.gnu.org/software/gawk/manual/html_node/Debugger.html#Debugger).
-e program-text, --source program-text
Χρησιμοποιήστε το program-text ως πηγαίο κώδικα προγράμματος AWK. Κάθε παράμετρος που παρέχεται μέσω του -e αντιμετωπίζεται σαν να ξεκινά με μια έμμεση δήλωση @namespace "awk".
-E file, --exec file
Παρόμοιο με το -f, ωστόσο, αυτή η επιλογή είναι η τελευταία που υποβάλλεται σε επεξεργασία. Αυτό θα πρέπει να χρησιμοποιείται με σενάρια #!, ιδιαίτερα για εφαρμογές CGI, για να αποφεύγεται η αποστολή επιλογών ή πηγαίου κώδικα (!) στη γραμμή εντολών από μια διεύθυνση URL. Αυτή η επιλογή απενεργοποιεί τις αντιστοιχίσεις μεταβλητών στη γραμμή εντολών.
-g, --gen-pot
Ελέγξτε και αναλύστε το πρόγραμμα AWK και δημιουργήστε ένα αρχείο μορφής GNU .pot (Portable Object Template) στην τυπική έξοδο με εγγραφές για όλες τις τοπικοποιήσιμες συμβολοσειρές στο πρόγραμμα. Το ίδιο το πρόγραμμα δεν εκτελείται.
-h, --help
Εμφανίστε μια σχετικά σύντομη περίληψη των διαθέσιμων επιλογών στην τυπική έξοδο. Σύμφωνα με τα πρότυπα κωδικοποίησης GNU, αυτές οι επιλογές προκαλούν άμεση, επιτυχή έξοδο.
-i include-file, --include include-file
Φορτώστε μια βιβλιοθήκη πηγαίου κώδικα awk. Αυτό αναζητά τη βιβλιοθήκη χρησιμοποιώντας τη μεταβλητή περιβάλλοντος AWKPATH. Εάν η αρχική αναζήτηση αποτύχει, θα γίνει μια άλλη προσπάθεια αφού προστεθεί η κατάληξη .awk. Το αρχείο θα φορτωθεί μόνο μία φορά (δηλαδή, τα αντίγραφα αφαιρούνται) και ο κώδικας δεν αποτελεί τον κύριο πηγαίο κώδικα του προγράμματος. Τα αρχεία που διαβάζονται με το --include αντιμετωπίζονται σαν να ξεκινούν με μια έμμεση δήλωση @namespace "awk".
-I, --trace
Εμφανίζει τις εσωτερικές ονομασίες των εντολών byte καθώς εκτελούνται κατά την εκτέλεση του προγράμματος. Η έξοδος εμφανίζεται στην τυπική έξοδο σφαλμάτων. Κάθε «κωδικός λειτουργίας» προηγείται από ένα σύμβολο «+» στην έξοδο.
-k, --csv
Ενεργοποιεί την ειδική επεξεργασία CSV. Δείτε την ενότητα «Comma Separated Values» για περισσότερες λεπτομέρειες.
-l lib, --load lib
Φορτώνει μια επέκταση gawk από τη δυναμική βιβλιοθήκη lib. Αυτό αναζητά τη βιβλιοθήκη χρησιμοποιώντας τη μεταβλητή περιβάλλοντος AWKLIBPATH. Εάν η αρχική αναζήτηση αποτύχει, θα γίνει μια άλλη προσπάθεια μετά την προσθήκη του προεπιλεγμένου καταλήγματος δυναμικής βιβλιοθήκης για την πλατφόρμα. Η ρουτίνα αρχικοποίησης της βιβλιοθήκης αναμένεται να ονομάζεται dl_load().
-L [τιμή], --lint[=τιμή]
Παρέχει προειδοποιήσεις σχετικά με κατασκευές που είναι αμφίβολες ή μη φορητές σε άλλες υλοποιήσεις AWK. Δείτε το [https://www.gnu.org/software/gawk/manual/html_node/Options.html#Options] για τη λίστα των πιθανών τιμών για την τιμή.
-M, --bignum
Επιβάλλει αριθμητική αυθαίρετης ακρίβειας στους αριθμούς. Αυτή η επιλογή δεν έχει καμία επίδραση εάν το gawk δεν έχει μεταγλωττιστεί για να χρησιμοποιεί τις βιβλιοθήκες GNU MPFR και GMP. (Σε μια τέτοια περίπτωση, το gawk εκδίδει μια προειδοποίηση.)
ΣΗΜΕΙΩΣΗ: Αυτή η δυνατότητα είναι υπό παρακολούθηση. Ο κύριος συντηρητής του gawk δεν την υποστηρίζει πλέον, αν και υπάρχει ένα μέλος της ομάδας ανάπτυξης που την υποστηρίζει. Εάν αυτή η κατάσταση αλλάξει, η δυνατότητα θα αφαιρεθεί από το gawk.
-n, --non-decimal-data
Αναγνωρίζει οκταδικές και δεκαεξαδικές τιμές στα δεδομένα εισόδου. Χρησιμοποιήστε αυτήν την επιλογή με μεγάλη προσοχή!
-N, --use-lc-numeric
Επιβάλλει στο gawk να χρησιμοποιεί τον χαρακτήρα δεκαδικού σημείου της τοπικής ρύθμισης κατά την ανάλυση των δεδομένων εισόδου.
-o[αρχείο], --pretty-print[=αρχείο]
Εξάγει μια μορφοποιημένη έκδοση του προγράμματος στο αρχείο. Η προεπιλεγμένη τιμή είναι awkprof.out στον τρέχοντα κατάλογο. Αυτή η επιλογή υπονοεί το --no-optimize.
-O, --optimize
Ενεργοποιεί τις προεπιλεγμένες βελτιστοποιήσεις του gawk στην εσωτερική αναπαράσταση του προγράμματος. Αυτή η επιλογή είναι ενεργοποιημένη από προεπιλογή.
-p[αρχείο-προφίλ], --profile[=αρχείο-προφίλ]
Ξεκινά μια συνεδρία δημιουργίας προφίλ και στέλνει τα δεδομένα δημιουργίας προφίλ στο αρχείο-προφίλ. Η προεπιλογή είναι awkprof.out στον τρέχοντα κατάλογο. Το προφίλ περιέχει τον αριθμό εκτελέσεων κάθε εντολής στο πρόγραμμα στην αριστερή στήλη και τον αριθμό κλήσεων συνάρτησης για κάθε συνάρτηση που έχει οριστεί από τον χρήστη. Το Gawk εκτελείται πιο αργά σε αυτήν τη λειτουργία. Αυτή η επιλογή υπονοεί το --no-optimize.
-P, --posix
Αυτό ενεργοποιεί τη συμβατή λειτουργία και απενεργοποιεί ορισμένες κοινές επεκτάσεις.
-r, --re-interval
Ενεργοποιεί τη χρήση εκφράσεων διαστήματος στην αντιστοίχιση κανονικών εκφράσεων. Οι εκφράσεις διαστήματος είναι ενεργοποιημένες από προεπιλογή, αλλά αυτή η επιλογή παραμένει για λόγους συμβατότητας.
-s, --no-optimize
Απενεργοποιεί τις προεπιλεγμένες βελτιστοποιήσεις του gawk στην εσωτερική αναπαράσταση του προγράμματος.
-S, --sandbox
Εκτελεί το gawk σε λειτουργία sandbox, απενεργοποιώντας τη συνάρτηση system(), την ανακατεύθυνση εισόδου με τη γραμμή getline, την ανακατεύθυνση εξόδου με τις εντολές print και printf, και τη φόρτωση δυναμικών επεκτάσεων. Η εκτέλεση εντολών (μέσω διοχετεύσεων) είναι επίσης απενεργοποιημένη.
-t, --lint-old
Εμφανίζει προειδοποιήσεις σχετικά με κατασκευές που δεν είναι συμβατές με την αρχική έκδοση του UNIX awk.
-V, --version
Εκτυπώνει πληροφορίες έκδοσης για αυτήν τη συγκεκριμένη έκδοση του gawk στην τυπική έξοδο. Αυτό είναι χρήσιμο όταν αναφέρετε σφάλματα. Σύμφωνα με τα Πρότυπα Κωδικοποίησης της GNU, αυτές οι επιλογές προκαλούν άμεση, επιτυχή έξοδο.
--
Σηματοδοτεί το τέλος των επιλογών. Αυτό είναι χρήσιμο για να επιτρέψει σε περαιτέρω ορίσματα στο πρόγραμμα AWK να ξεκινήσουν με ένα “-”.
Σε λειτουργία συμβατότητας, οποιεσδήποτε άλλες επιλογές επισημαίνονται ως μη έγκυρες, αλλά αλλιώς αγνοούνται. Σε κανονική λειτουργία, εφόσον έχει παρασχεθεί κείμενο προγράμματος, οι άγνωστες επιλογές μεταβιβάζονται στο πρόγραμμα AWK στον πίνακα ARGV για επεξεργασία.
Για συμβατότητα με το POSIX, η επιλογή -W μπορεί να χρησιμοποιηθεί, ακολουθούμενη από το όνομα μιας μεγάλης επιλογής.
ΕΚΤΕΛΕΣΗ ΠΡΟΓΡΑΜΜΑΤΟΣ AWK
Ένα πρόγραμμα AWK αποτελείται από μια ακολουθία προαιρετικών οδηγιών, δηλώσεων προτύπου-ενέργειας και προαιρετικών ορισμών συνάρτησης.
@include "όνομα αρχείου"
@load "όνομα αρχείου"
@namespace "όνομα"
πρότυπο { δηλώσεις ενέργειας }
συνάρτηση όνομα(λίστα παραμέτρων) { δηλώσεις }
Το Gawk διαβάζει πρώτα την πηγή του προγράμματος από το/τα αρχείο/α προγράμματος, εάν έχουν καθοριστεί, από τα ορίσματα στο --source ή από το πρώτο μη-επιλογή όρισμα στη γραμμή εντολών. Οι επιλογές -f και --source μπορούν να χρησιμοποιηθούν πολλές φορές στη γραμμή εντολών. Το Gawk διαβάζει το κείμενο του προγράμματος σαν να είχαν συνδεθεί όλα τα αρχεία προγράμματος και τα κείμενα προέλευσης της γραμμής εντολών.
Επιπλέον, γραμμές που ξεκινούν με @include μπορούν να χρησιμοποιηθούν για να συμπεριληφθούν άλλα αρχεία προέλευσης στο πρόγραμμά σας. Αυτό ισοδυναμεί με τη χρήση της επιλογής --include.
Γραμμές που ξεκινούν με @load μπορούν να χρησιμοποιηθούν για τη φόρτωση συναρτήσεων επέκτασης στο πρόγραμμά σας. Αυτό ισοδυναμεί με τη χρήση της επιλογής --load.
Η μεταβλητή περιβάλλοντος AWKPATH καθορίζει μια διαδρομή αναζήτησης που θα χρησιμοποιηθεί κατά την εύρεση αρχείων προέλευσης που ορίζονται με τις επιλογές -f και --include. Εάν αυτή η μεταβλητή δεν υπάρχει, η προεπιλεγμένη διαδρομή είναι ". :/usr/local/share/awk". (Η πραγματική διαδρομή μπορεί να διαφέρει, ανάλογα με τον τρόπο με τον οποίο δημιουργήθηκε και εγκαταστάθηκε το gawk.) Εάν ένα όνομα αρχείου που δίνεται στην επιλογή -f περιέχει έναν χαρακτήρα "/", δεν εκτελείται αναζήτηση διαδρομής.
Η μεταβλητή περιβάλλοντος AWKLIBPATH καθορίζει μια διαδρομή αναζήτησης που θα χρησιμοποιηθεί κατά την εύρεση αρχείων προέλευσης που ορίζονται με την επιλογή --load. Εάν αυτή η μεταβλητή δεν υπάρχει, η προεπιλεγμένη διαδρομή είναι "/usr/local/lib/gawk". (Η πραγματική διαδρομή μπορεί να διαφέρει, ανάλογα με τον τρόπο με τον οποίο δημιουργήθηκε και εγκαταστάθηκε το gawk.)
Το Gawk εκτελεί προγράμματα AWK με την ακόλουθη σειρά. Πρώτον, εκτελούνται όλες οι αναθέσεις μεταβλητών που καθορίζονται μέσω της επιλογής -v. Στη συνέχεια, το gawk μεταγλωττίζει το πρόγραμμα σε μια εσωτερική μορφή. Στη συνέχεια, το gawk εκτελεί τον κώδικα στις δηλώσεις BEGIN (εάν υπάρχουν) και στη συνέχεια προχωρά στην ανάγνωση κάθε αρχείου που αναφέρεται στον πίνακα ARGV (έως το ARGV[ARGC-1]). Εάν δεν υπάρχουν αρχεία που αναφέρονται στη γραμμή εντολών, το gawk διαβάζει την τυπική είσοδο.
Εάν ένα όνομα αρχείου στη γραμμή εντολών έχει τη μορφή var=val, αντιμετωπίζεται ως ανάθεση μεταβλητής. Η μεταβλητή var θα λάβει την τιμή val. (Αυτό συμβαίνει μετά την εκτέλεση τυχόν δηλώσεων BEGIN.)
Εάν η τιμή ενός συγκεκριμένου στοιχείου του ARGV είναι κενή (""), το gawk το παραλείπει.
Για κάθε αρχείο εισόδου, εάν υπάρχει κανόνας BEGINFILE, το gawk εκτελεί τον σχετικό κώδικα πριν από την επεξεργασία του περιεχομένου του αρχείου. Ομοίως, το gawk εκτελεί τον κώδικα που σχετίζεται με τους κανόνες ENDFILE μετά την επεξεργασία του αρχείου.
Για κάθε εγγραφή στην είσοδο, το gawk ελέγχει αν ταιριάζει με κάποιο μοτίβο στο πρόγραμμα AWK. Για κάθε μοτίβο με το οποίο ταιριάζει η εγγραφή, το gawk εκτελεί την αντίστοιχη ενέργεια. Τα μοτίβα ελέγχονται με τη σειρά που εμφανίζονται στο πρόγραμμα.
Τέλος, αφού εξαντληθεί όλη η είσοδος, το gawk εκτελεί τον κώδικα στους κανόνες END (εάν υπάρχουν).
Διευθύνσεις στη Γραμμή Εντολών
Σύμφωνα με το POSIX, τα αρχεία που αναφέρονται στη γραμμή εντολών του awk πρέπει να είναι αρχεία κειμένου. Η συμπεριφορά είναι "απροσδιόριστη" εάν δεν είναι. Οι περισσότερες εκδόσεις του awk αντιμετωπίζουν έναν κατάλογο στη γραμμή εντολών ως θανατηφόρο σφάλμα.
Για το gawk, ένας κατάλογος στη γραμμή εντολών παράγει μια προειδοποίηση, αλλά διαφορετικά παραλείπεται. Εάν δοθεί είτε η επιλογή --posix είτε η επιλογή --traditional, τότε το gawk επιστρέφει στην αντιμετώπιση των καταλόγων στη γραμμή εντολών ως θανατηφόρο σφάλμα.
ΜΕΤΑΒΛΗΤΕΣ, ΕΓΓΡΑΦΕΣ ΚΑΙ ΠΕΔΙΑ
Οι μεταβλητές AWK είναι δυναμικές. δημιουργούνται όταν χρησιμοποιούνται για πρώτη φορά. Οι τιμές τους είναι είτε αριθμοί κινητής υποδιαστολής είτε συμβολοσειρές, ή και τα δύο, ανάλογα με τον τρόπο χρήσης τους. Επιπλέον, το gawk επιτρέπει στις μεταβλητές να έχουν τύπο κανονικής έκφρασης. Το AWK έχει επίσης μονοδιάστατα σύνολα. τα σύνολα με πολλές διαστάσεις μπορούν να προσομοιωθούν. Ωστόσο, το gawk παρέχει πραγματικά σύνολα συνοιών. Αρκετές προκαθορισμένες μεταβλητές ορίζονται καθώς εκτελείται ένα πρόγραμμα. αυτές περιγράφονται όπως χρειάζεται και συνοψίζονται παρακάτω.
Εγγραφές
Κανονικά, οι εγγραφές διαχωρίζονται με χαρακτήρες νέας γραμμής. Μπορείτε να ελέγξετε τον τρόπο διαχωρισμού των εγγραφών, εκχωρώντας τιμές στην ενσωματωμένη μεταβλητή RS. Δείτε το [https://www.gnu.org/software/gawk/manual/html_node/Records.html] για λεπτομέρειες.
Πεδία
Καθώς διαβάζεται κάθε εγγραφή εισόδου, το gawk χωρίζει την εγγραφή σε πεδία, χρησιμοποιώντας την τιμή της μεταβλητής FS ως διαχωριστικό πεδίου. Επιπλέον, οι μεταβλητές FIELDWIDTHS και FPAT μπορούν να χρησιμοποιηθούν για τον έλεγχο του διαχωρισμού πεδίων εισόδου. Δείτε τις λεπτομέρειες, ξεκινώντας από το [https://www.gnu.org/software/gawk/manual/html_node/Fields.html].
Κάθε πεδίο στην εγγραφή εισόδου μπορεί να αναφερθεί με τη θέση του: $1, $2 και ούτω καθεξής. Το $0 είναι ολόκληρη η εγγραφή, συμπεριλαμβανομένων των κενού χώρου στην αρχή και στο τέλος.
Η μεταβλητή NF ορίζεται στον συνολικό αριθμό πεδίων στην εγγραφή εισόδου.
Οι αναφορές σε πεδία που δεν υπάρχουν (δηλαδή, πεδία μετά το $NF) παράγουν μια μηδενική συμβολοσειρά. Ωστόσο, η εκχώρηση σε ένα πεδίο που δεν υπάρχει (π.χ., $(NF+2) = 5) αυξάνει την τιμή του NF, δημιουργεί τυχόν ενδιάμεσα πεδία με τη μηδενική συμβολοσειρά ως τιμές τους και προκαλεί την επαναϋπολογισμό της τιμής του $0, με τα πεδία να διαχωρίζονται από την τιμή του OFS. Οι αναφορές σε πεδία με αρνητικό αριθμό προκαλούν θανατηφόρο σφάλμα. Η μείωση του NF προκαλεί την απώλεια των τιμών των πεδίων μετά τη νέα τιμή και την επαναϋπολογισμό της τιμής του $0, με τα πεδία να διαχωρίζονται από την τιμή του OFS.
Η ανάθεση μιας τιμής σε ένα υπάρχον πεδίο προκαλεί την επαναδημιουργία ολόκληρης της εγγραφής όταν γίνεται αναφορά στο $0. Ομοίως, η ανάθεση μιας τιμής στο $0 προκαλεί την επαναδιαίρεση της εγγραφής, δημιουργώντας νέες τιμές για τα πεδία.
Τιμές που διαχωρίζονται με κόμμα
Όταν καλείται είτε με την επιλογή -k είτε με την επιλογή --csv, το gawk δεν χρησιμοποιεί τον κανονικό προσδιορισμό εγγραφών και τη διαίρεση πεδίων, όπως περιγράφεται παραπάνω. Αντίθετα, οι εγγραφές τερματίζονται με μη εισαγωγικά νέα, και τα πεδία διαχωρίζονται με κόμματα. Μπορούν να χρησιμοποιηθούν διπλά εισαγωγικά για να περικλείσουν πεδία που περιέχουν κόμματα, νέα ή διπλά διπλά εισαγωγικά. Δείτε [https://www.gnu.org/software/gawk/manual/html_node/Comma-Separated-Fields.html] για περισσότερες λεπτομέρειες.
Ενσωματωμένες μεταβλητές
Οι ενσωματωμένες μεταβλητές του Gawk παρατίθενται παρακάτω. Αυτή η λίστα είναι σκόπιμα συνοπτική. Για λεπτομέρειες, δείτε [https://www.gnu.org/software/gawk/manual/html_node/Built_002din-Variables.html].
ARGC Ο αριθμός των ορισμάτων γραμμής εντολών.
ARGIND Ο δείκτης στο ARGV του τρέχοντος αρχείου που υποβάλλεται σε επεξεργασία.
ARGV Πίνακας ορισμάτων γραμμής εντολών. Ο πίνακας έχει δείκτη από 0 έως ARGC - 1.
BINMODE Σε μη-POSIX συστήματα, καθορίζει τη χρήση της λειτουργίας "δυαδικού" για όλες τις λειτουργίες εισόδου/εξόδου αρχείων. Δείτε [https://www.gnu.org/software/gawk/manual/html\_node/PC-Using.html](https://www.gnu.org/software/gawk/manual/html_node/PC-Using.html) για λεπτομέρειες.
CONVFMT Η μορφή μετατροπής για αριθμούς, "%.6g" από προεπιλογή.
ENVIRON Ένας πίνακας που περιέχει τις τιμές του τρέχοντος περιβάλλοντος. Ο πίνακας έχει δείκτη με τις μεταβλητές περιβάλλοντος, με κάθε στοιχείο να είναι η τιμή αυτής της μεταβλητής.
ERRNO Εάν προκύψει ένα σφάλμα συστήματος είτε κατά την εκτέλεση μιας ανακατεύθυνσης για το getline, κατά τη διάρκεια μιας ανάγνωσης για το getline ή κατά τη διάρκεια ενός κλεισίματος, τότε η μεταβλητή ERRNO ορίζεται σε μια συμβολοσειρά που περιγράφει το σφάλμα. Η τιμή υπόκειται σε μετάφραση σε μη-αγγλικές τοποθεσίες.
FIELDWIDTHS Μια λίστα πεδίων που διαχωρίζονται με κενό διάστημα. Όταν ορίζεται, το gawk αναλύει την είσοδο σε πεδία σταθερού πλάτους, αντί να χρησιμοποιεί την τιμή της μεταβλητής FS ως διαχωριστικό πεδίων. Κάθε πλάτος πεδίου μπορεί να προηγείται προαιρετικά από μια τιμή που χωρίζεται με άνω και κάτω τελεία, η οποία καθορίζει τον αριθμό των χαρακτήρων που θα παραλείπονται πριν από την έναρξη του πεδίου.
FILENAME Το όνομα του τρέχοντος αρχείου εισόδου. Εάν δεν καθοριστούν αρχεία στη γραμμή εντολών, η τιμή της μεταβλητής FILENAME είναι "-". Ωστόσο, η μεταβλητή FILENAME δεν ορίζεται μέσα στον κανόνα BEGIN (εκτός εάν οριστεί από το getline).
FNR Ο αριθμός εγγραφής εισόδου στο τρέχον αρχείο εισόδου.
FPAT Μια κανονική έκφραση που περιγράφει το περιεχόμενο των πεδίων σε μια εγγραφή. Όταν ορίζεται, το gawk αναλύει την είσοδο σε πεδία, όπου τα πεδία ταιριάζουν με την κανονική έκφραση, αντί να χρησιμοποιεί την τιμή της μεταβλητής FS ως διαχωριστικό πεδίων.
FS Το διαχωριστικό πεδίων εισόδου, ένα κενό από προεπιλογή. Δείτε [https://www.gnu.org/software/gawk/manual/html\_node/Field-Separators.html] για λεπτομέρειες.
FUNCTAB Ένας πίνακας, των οποίων οι δείκτες και οι αντίστοιχες τιμές είναι τα ονόματα όλων των ορισμένων από τον χρήστη ή των επεκτάσιμων συναρτήσεων στο πρόγραμμα. ΣΗΜΕΙΩΣΗ: Δεν μπορείτε να χρησιμοποιήσετε την εντολή delete με τον πίνακα FUNCTAB.
IGNORECASE Ελέγχει την ευαισθησία πεζών-κεφαλαίων σε όλες τις κανονικές εκφράσεις και τις λειτουργίες συμβολοσειρών. Δείτε το [https://www.gnu.org/software/gawk/manual/html_node/Case_002dsensitivity.html](https://www.gnu.org/software/gawk/manual/html_node/Case_002dsensitivity.html) για λεπτομέρειες.
LINT Παρέχει δυναμικό έλεγχο της επιλογής --lint μέσα από ένα πρόγραμμα AWK.
NF Ο αριθμός των πεδίων στην τρέχουσα είσοδο εγγραφής.
NR Ο συνολικός αριθμός των εισερχόμενων εγγραφών που έχουν δει μέχρι στιγμής.
OFMT Η μορφή εξόδου για αριθμούς, "%.6g" από προεπιλογή.
OFS Ο διαχωριστής πεδίων εξόδου, ένα κενό από προεπιλογή.
ORS Ο διαχωριστής εγγραφής εξόδου, από προεπιλογή μια νέα γραμμή.
PREC Η ακρίβεια λειτουργίας αυθαίρετης ακρίβειας αριθμών κινητής υποδιαστολής, 53 από προεπιλογή.
PROCINFO Τα στοιχεία αυτού του πίνακα παρέχουν πρόσβαση σε πληροφορίες σχετικά με το τρέχον πρόγραμμα AWK. Δείτε το [https://www.gnu.org/software/gawk/manual/html_node/Auto_002dset](https://www.gnu.org/software/gawk/manual/html_node/Auto_002dset) για τις λεπτομέρειες.
ROUNDMODE Η λειτουργία στρογγυλοποίησης που θα χρησιμοποιηθεί για αριθμητική αυθαίρετης ακρίβειας σε αριθμούς, από προεπιλογή "N" (λειτουργία IEEE-754 roundTiesToEven). Δείτε το [https://www.gnu.org/software/gawk/manual/html_node/Setting-the-rounding-mode](https://www.gnu.org/software/gawk/manual/html_node/Setting-the-rounding-mode) για τις λεπτομέρειες.
RS Ο διαχωριστής εισόδου εγγραφής, από προεπιλογή μια νέα γραμμή.
RT Ο τερματιστής εγγραφής. Το Gawk ορίζει το RT στο κείμενο εισόδου που ταιριάζει με τον χαρακτήρα ή την κανονική έκφραση που καθορίζεται από το RS.
RSTART Ο δείκτης του πρώτου χαρακτήρα που ταιριάζει με τη συνάρτηση match(); 0 εάν δεν υπάρχει αντιστοιχία.
RLENGTH Το μήκος της συμβολοσειράς που ταιριάζει με τη συνάρτηση match(); -1 εάν δεν υπάρχει αντιστοιχία.
SUBSEP Η συμβολοσειρά που χρησιμοποιείται για το διαχωρισμό πολλαπλών υποδείκτών σε στοιχεία πίνακα, από προεπιλογή "\034".
SYMTAB Ένας πίνακας, των οποίων οι δείκτες είναι τα ονόματα όλων των τρέχοντων ορισμένων παγκόσμιων μεταβλητών και πινάκων στο πρόγραμμα. Δεν μπορείτε να χρησιμοποιήσετε την εντολή delete με τον πίνακα SYMTAB, ούτε να εκχωρήσετε σε στοιχεία με έναν δείκτη που δεν είναι όνομα μεταβλητής.
TEXTDOMAIN Η περιοχή κειμένου του προγράμματος AWK. χρησιμοποιείται για την εύρεση των τοπικοποιημένων μεταφράσεων για τις συμβολοσειρές του προγράμματος.
Πίνακες
Οι πίνακες υποδεικνύονται με μια έκφραση μέσα σε αγκύλες ([ και ]). Εάν η έκφραση είναι μια λίστα εκφράσεων (expr, expr ...) τότε ο δείκτης του πίνακα είναι μια συμβολοσειρά που αποτελείται από τη συνένωση της (τιμής συμβολοσειράς) κάθε έκφρασης, διαχωρισμένης από την τιμή της μεταβλητής SUBSEP. Αυτή η δυνατότητα χρησιμοποιείται για την προσομοίωση πινάκων πολλαπλών διαστάσεων. Για παράδειγμα:
i = "A"; j = "B"; k = "C"
x[i, j, k] = "hello, world\n"
εκχωρεί τη συμβολοσειρά "hello, world\n" στο στοιχείο του πίνακα x, το οποίο υποδεικνύεται από τη συμβολοσειρά "A\034B\034C". Όλοι οι πίνακες στο AWK είναι συσχετιστικοί, δηλαδή υποδεικνύονται από τιμές συμβολοσειράς.
Η ειδική τελεστής in μπορεί να χρησιμοποιηθεί για να ελέγξετε εάν ένας πίνακας έχει έναν δείκτη που αποτελείται από μια συγκεκριμένη τιμή:
if (val in array)
print array[val]
Εάν ο πίνακας έχει πολλαπλά υποδείγματα, χρησιμοποιήστε (i, j) στον array.
Η δομή in μπορεί επίσης να χρησιμοποιηθεί σε έναν βρόχο for για να επαναληφθεί σε όλα τα στοιχεία ενός πίνακα.
Ωστόσο, η δομή (i, j) in array λειτουργεί μόνο σε δοκιμές, όχι σε βρόχους for.
Ένα στοιχείο μπορεί να διαγραφεί από έναν πίνακα χρησιμοποιώντας την εντολή delete. Η εντολή delete μπορεί επίσης να χρησιμοποιηθεί για να διαγραφεί ολόκληρο το περιεχόμενο ενός πίνακα, απλά καθορίζοντας το όνομα του πίνακα χωρίς κάποιο υποδείκτη.
Η Gawk υποστηρίζει πραγματικούς πολυδιάστατους πίνακες. Δεν απαιτείται οι πίνακες αυτοί να είναι «ορθογώνιοι» όπως στην C ή στην C++. Δείτε [https://www.gnu.org/software/gawk/manual/html_node/Arrays] για λεπτομέρειες.
Χώροι ονομάτων
Η Gawk παρέχει μια απλή λειτουργία χώρου ονομάτων για να βοηθήσει στην αντιμετώπιση του γεγονότος ότι όλες οι μεταβλητές στην AWK είναι καθολικές.
Ένα πληρωμένο όνομα αποτελείται από δύο απλούς αναγνωριστικούς που συνδέονται με μια διπλή άνω τελεία (::). Ο αριστερός αναγνωριστικός αντιπροσωπεύει τον χώρο ονομάτων και ο δεξιός αναγνωριστικός είναι η μεταβλητή εντός αυτού. Όλα τα απλά (μη πληρωμένα) ονόματα θεωρούνται ότι βρίσκονται στον «τρέχοντα» χώρο ονομάτων. ο προεπιλεγμένος χώρος ονομάτων είναι το awk. Ωστόσο, οι απλοί αναγνωριστικοί που αποτελούνται αποκλειστικά από κεφαλαία γράμματα αναγκάζονται στον χώρο ονομάτων awk, ακόμη και αν ο τρέχων χώρος ονομάτων είναι διαφορετικός.
Μπορείτε να αλλάξετε τον τρέχοντα χώρο ονομάτων με μια οδηγία @namespace "name".
Τα τυπικά προκαθορισμένα ονόματα προκαθορισμένων συναρτήσεων δεν μπορούν να χρησιμοποιηθούν ως ονόματα χώρων ονομάτων. Τα ονόματα των πρόσθετων συναρτήσεων που παρέχονται από την gawk μπορούν να χρησιμοποιηθούν ως ονόματα χώρων ονομάτων ή ως απλοί αναγνωριστικοί σε άλλους χώρους ονομάτων. Για περισσότερες λεπτομέρειες, δείτε [https://www.gnu.org/software/gawk/manual/html_node/Namespaces.html#Namespaces].
Τύπος μεταβλητής και μετατροπή
Οι μεταβλητές και τα πεδία μπορεί να είναι (κινητής υποδιαστολής) αριθμοί, ή συμβολοσειρές, ή και τα δύο. Μπορεί επίσης να είναι κανονικές εκφράσεις. Ο τρόπος με τον οποίο ερμηνεύεται η τιμή μιας μεταβλητής εξαρτάται από το περιβάλλον της. Εάν χρησιμοποιηθεί σε μια αριθμητική έκφραση, θα αντιμετωπιστεί ως αριθμός. εάν χρησιμοποιηθεί ως συμβολοσειρά, θα αντιμετωπιστεί ως συμβολοσειρά.
Για να αναγκάσετε μια μεταβλητή να αντιμετωπίζεται ως αριθμός, προσθέστε μηδέν σε αυτήν. για να την αναγκάσετε να αντιμετωπίζεται ως συμβολοσειρά, συνενώστε την με τη μηδενική συμβολοσειρά.
Οι μη αρχικοποιημένες μεταβλητές έχουν την αριθμητική τιμή μηδέν και τη συμβολοσειριακή τιμή "" (η μηδενική ή κενή συμβολοσειρά).
Όταν μια συμβολοσειρά πρέπει να μετατραπεί σε αριθμό, η μετατροπή πραγματοποιείται χρησιμοποιώντας τη συνάρτηση strtod(3). Ένας αριθμός μετατρέπεται σε συμβολοσειρά χρησιμοποιώντας την τιμή του CONVFMT ως συμβολοσειρά μορφοποίησης για τη συνάρτηση sprintf(3), με την αριθμητική τιμή της μεταβλητής ως όρισμα. Ωστόσο, ακόμη και αν όλοι οι αριθμοί στην AWK είναι κινητής υποδιαστολής, οι ακέραιες τιμές μετατρέπονται πάντα ως ακέραιοι.
Η Gawk εκτελεί συγκρίσεις ως εξής: Εάν δύο μεταβλητές είναι αριθμητικές, συγκρίνονται αριθμητικά. Εάν η μία τιμή είναι αριθμητική και η άλλη έχει μια συμβολοσειριακή τιμή που είναι μια «αριθμητική συμβολοσειρά», τότε οι συγκρίσεις πραγματοποιούνται επίσης αριθμητικά. Διαφορετικά, η αριθμητική τιμή μετατρέπεται σε συμβολοσειρά και πραγματοποιείται μια σύγκριση συμβολοσειρών. Δύο συμβολοσειρές, φυσικά, συγκρίνονται ως συμβολοσειρές.
Σημειώστε ότι οι σταθερές συμβολοσειρές, όπως το "57", δεν είναι αριθμητικές συμβολοσειρές, είναι απλές σταθερές συμβολοσειρές. Η ιδέα της "αριθμητικής συμβολοσειράς" ισχύει μόνο για πεδία, είσοδο getline, FILENAME, στοιχεία ARGV και στοιχεία ENVIRON καθώς και για τα στοιχεία ενός πίνακα που δημιουργείται από τις συναρτήσεις split() ή patsplit() και που είναι αριθμητικές συμβολοσειρές. Η βασική ιδέα είναι ότι μόνο η είσοδος του χρήστη και μόνο αυτή, η οποία μοιάζει με αριθμό, θα πρέπει να αντιμετωπίζεται ως τέτοια.
Οκταδικές και Δεκαεξαδικές Σταθερές
Μπορείτε να χρησιμοποιήσετε σταθερές οκταδικού και δεκαεξαδικού τύπου C στον πηγαίο κώδικα του προγράμματος AWK. Για παράδειγμα, η οκταδική τιμή 011 ισούται με τη δεκαδική 9 και η δεκαεξαδική τιμή 0x11 ισούται με τη δεκαδική 17.
Σταθερές Συμβολοσειρές
Οι σταθερές συμβολοσειρές στην AWK είναι ακολουθίες χαρακτήρων που περικλείονται σε διπλά εισαγωγικά (όπως "value"). Μέσα στις συμβολοσειρές, ορισμένες ακολουθίες διαφυγής αναγνωρίζονται, όπως και στην C. Δείτε το [https://www.gnu.org/software/gawk/manual/html_node/Escape-Sequences] για λεπτομέρειες.
Σταθερές Εκφράσεων
Μια σταθερά κανονικής έκφρασης είναι μια ακολουθία χαρακτήρων που περικλείεται σε κάθετες παρενθέσεις (όπως /value/). Οι ακολουθίες διαφυγής που περιγράφονται στο εγχειρίδιο μπορούν επίσης να χρησιμοποιηθούν μέσα σε σταθερές κανονικές εκφράσεις (π.χ. /[ \t\f\n\r\v]/ αντιστοιχεί σε χαρακτήρες κενού).
Η Gawk παρέχει σταθερές κανονικών εκφράσεων με αυστηρό τύπο. Αυτές γράφονται με ένα προηγούμενο σύμβολο @ (όπως: @/value/). Αυτές οι σταθερές μπορούν να ανατεθούν σε μεταβλητές (μεταβλητές, στοιχεία πίνακα) και να περαστούν σε συναρτήσεις που ορίζονται από τον χρήστη. Οι μεταβλητές στις οποίες έχουν γίνει αυτές οι αναθέσεις έχουν τύπο κανονικής έκφρασης.
ΜΟΤΙΒΑ ΚΑΙ ΕΝΕΡΓΕΙΕΣ
Η AWK είναι μια γλώσσα που βασίζεται σε γραμμές. Το μοτίβο έρχεται πρώτο και μετά η ενέργεια. Οι εντολές δράσης περικλείονται σε { και }. Είτε το μοτίβο μπορεί να λείπει, είτε η ενέργεια μπορεί να λείπει, αλλά, φυσικά, όχι και τα δύο. Εάν λείπει το μοτίβο, η ενέργεια εκτελείται για κάθε εγγραφή εισόδου. Μια ενέργεια που λείπει είναι ισοδύναμη με:
{ print }
η οποία εκτυπώνει ολόκληρη την εγγραφή.
Τα σχόλια ξεκινούν με τον χαρακτήρα # και συνεχίζονται μέχρι το τέλος της γραμμής. Μπορούν να χρησιμοποιηθούν κενές γραμμές για να διαχωριστούν οι εντολές. Συνήθως, μια εντολή τελειώνει με μια νέα γραμμή, ωστόσο, αυτό δεν ισχύει για γραμμές που τελειώνουν με κόμμα, {, ?, :, && ή ||. Οι γραμμές που τελειώνουν με do ή else έχουν επίσης τις εντολές τους αυτόματα συνεχισμένες στην επόμενη γραμμή. Σε άλλες περιπτώσεις, μια γραμμή μπορεί να συνεχιστεί τερματίζοντάς την με ένα σύμβολο "\", οπότε η νέα γραμμή αγνοείται. Ωστόσο, ένα σύμβολο "\" μετά από ένα # δεν είναι ειδικό.
Μπορούν να τοποθετηθούν πολλές εντολές στην ίδια γραμμή διαχωρίζοντάς τες με ένα ";". Αυτό ισχύει τόσο για τις εντολές εντός του τμήματος δράσης ενός ζεύγους μοτίβου-δράσης (η συνηθισμένη περίπτωση), όσο και για τις ίδιες τις εντολές μοτίβου-δράσης.
Μοτίβα
Τα μοτίβα AWK μπορεί να είναι ένα από τα ακόλουθα:
BEGIN
END
BEGINFILE
ENDFILE
/κανονική έκφραση/
σχετική έκφραση
μοτίβο && μοτίβο
μοτίβο || μοτίβο
μοτίβο ? μοτίβο : μοτίβο
(μοτίβο)
! μοτίβο
μοτίβο1, μοτίβο2
Το BEGIN και το END είναι δύο ειδικά είδη προτύπων τα οποία δεν ελέγχονται έναντι της εισόδου. Τα τμήματα δράσεων όλων των προτύπων BEGIN συγχωνεύονται σαν να είχαν γραφτεί όλες οι δηλώσεις σε έναν ενιαίο κανόνα BEGIN. Εκτελούνται πριν διαβαστεί οποιαδήποτε από τις εισόδους. Ομοίως, όλοι οι κανόνες END συγχωνεύονται και εκτελούνται όταν έχει εξαντληθεί όλη η είσοδος (ή όταν εκτελείται μια δήλωση εξόδου). Τα πρότυπα BEGIN και END δεν μπορούν να συνδυαστούν με άλλα πρότυπα σε εκφράσεις προτύπων. Τα πρότυπα BEGIN και END δεν μπορούν να έχουν τμήματα δράσεων που λείπουν.
Τα BEGINFILE και ENDFILE είναι επιπλέον ειδικά πρότυπα των οποίων οι ενέργειες εκτελούνται πριν διαβαστεί η πρώτη εγγραφή κάθε αρχείου εισόδου της γραμμής εντολών και μετά τη διάβασή της τελευταίας εγγραφής κάθε αρχείου. Μέσα στον κανόνα BEGINFILE, η τιμή του ERRNO είναι μια κενή συμβολοσειρά εάν το αρχείο άνοιξε με επιτυχία. Διαφορετικά, υπάρχει κάποιο πρόβλημα με το αρχείο και ο κώδικας θα πρέπει να χρησιμοποιήσει το nextfile για να το παραλείψει. Εάν αυτό δεν γίνει, το gawk παράγει το συνηθισμένο σφάλμα του για αρχεία που δεν μπορούν να ανοίξουν.
Για τα πρότυπα /κανονικής έκφρασης/, η σχετική δήλωση εκτελείται για κάθε εγγραφή εισόδου που ταιριάζει με την κανονική έκφραση. Οι κανονικές εκφράσεις είναι ουσιαστικά οι ίδιες με αυτές του egrep(1). Δείτε το [https://www.gnu.org/software/gawk/manual/html_node/Regexp.html](https://www.gnu.org/software/gawk/manual/html_node/Regexp.html) για λεπτομέρειες σχετικά με τις κανονικές εκφράσεις.
Μια σχεσιακή έκφραση μπορεί να χρησιμοποιήσει οποιονδήποτε από τους τελεστές που ορίζονται παρακάτω στην ενότητα για τις ενέργειες. Αυτά ελέγχουν γενικά εάν ορισμένα πεδία ταιριάζουν με ορισμένες κανονικές εκφράσεις.
Οι τελεστές &&, || και ! είναι η λογική AND, η λογική OR και η λογική NOT, αντίστοιχα, όπως και στην C. Εκτελούν αξιολόγηση βραχυκυκλώματος, επίσης όπως στην C, και χρησιμοποιούνται για τη συνδυασμένη πιο πρωτόγονες εκφράσεις προτύπων. Όπως στις περισσότερες γλώσσες, μπορούν να χρησιμοποιηθούν παρενθέσεις για να αλλάξει η σειρά αξιολόγησης.
Ο τελεστής ?: είναι σαν τον ίδιο τελεστή στην C. Εάν το πρώτο πρότυπο είναι αληθές, τότε το πρότυπο που χρησιμοποιείται για τη δοκιμή είναι το δεύτερο πρότυπο, διαφορετικά είναι το τρίτο. Μόνο το ένα από το δεύτερο και το τρίτο πρότυπο αξιολογείται.
Η μορφή πρότυπο1, πρότυπο2 μιας έκφρασης ονομάζεται πρότυπο εύρους. Ταιριάζει με όλες τις εγγραφές εισόδου ξεκινώντας με μια εγγραφή που ταιριάζει με το πρότυπο1 και συνεχίζοντας έως μια εγγραφή που ταιριάζει με το πρότυπο2, συμπεριλαμβανομένων και των δύο. Δεν συνδυάζεται με κανένα άλλο είδος έκφρασης προτύπου.
Ενέργειες
Οι δηλώσεις δράσεων περικλείονται σε άγκιστρα, { και }. Οι δηλώσεις δράσεων αποτελούνται από τις συνήθεις δηλώσεις ανάθεσης, υπό συνθήκη και βρόχου που βρίσκονται στις περισσότερες γλώσσες. Οι διαθέσιμοι τελεστές, οι δηλώσεις ελέγχου και οι δηλώσεις εισόδου/εξόδου είναι κατά πρότυπο αυτών της C.
Τελεστές
Οι τελεστές στην AWK, με σειρά φθίνουσας προτεραιότητας, είναι:
(...) Ομαδοποίηση
$ Αναφορά πεδίου.
++ -- Αύξηση και μείωση, και οι δύο προθετικές και μεταθετικές.
^ Ύψωση σε δύναμη.
+ - ! Μοναδιαίο πρόσημο συν, μοναδιαίο πρόσημο μείον και λογική άρνηση.
* / % Πολλαπλασιασμός, διαίρεση και υπόλοιπο.
+ - Πρόσθεση και αφαίρεση.
space Συγχώνευση συμβολοσειρών.
| |& Είσοδος/Έξοδος μέσω διαύλου (pipe) για τις συναρτήσεις getline, print και printf.
< > <= >= == !=
Οι συνήθεις τελεστές σύγκρισης.
~ !~ Αντιστοίχιση κανονικής έκφρασης, αντιστροφή της αντιστοίχισης.
in Έλεγχος για την ύπαρξη στοιχείου σε έναν πίνακα.
&& Λογική σύνδεση ΚΑΙ.
|| Λογική σύνδεση Ή.
?: Η έκφραση υπό συνθήκη της C. Έχει τη μορφή expr1 ? expr2 : expr3. Εάν η expr1 είναι αληθής, η τιμή της έκφρασης είναι η expr2, διαφορετικά είναι η expr3. Μόνο μία από τις expr2 και expr3 αξιολογείται.
= += -= *= /= %= ^=
Ανάθεση. Υποστηρίζεται τόσο η απόλυτη ανάθεση (var = value) όσο και η ανάθεση με τελεστή (οι υπόλοιπες μορφές).
Εντολές Ελέγχου
Οι εντολές ελέγχου είναι οι εξής:
if (συνθήκη) δήλωση [ else δήλωση ]
while (συνθήκη) δήλωση
do δήλωση while (συνθήκη)
for (expr1; expr2; expr3) δήλωση
for (μεταβλητή in πίνακας) δήλωση
break
continue
delete πίνακας[δείκτης]
delete πίνακας
exit [ έκφραση ]
{ δηλώσεις }
switch (έκφραση) {
case τιμή|κανονική_έκφραση : δήλωση
...
[ default: δήλωση ]
}
Εντολές Εισόδου/Εξόδου
Οι εντολές εισόδου/εξόδου είναι οι εξής:
close(αρχείο [, πως]) Κλείνει ένα ανοιχτό αρχείο, σωλήνα ή υπο-διεργασία. Η προαιρετική παράμετρος πως πρέπει να χρησιμοποιείται μόνο κατά το κλείσιμο μιας πλευράς ενός αμφίδρομου σωλήνα προς μια υπο-διεργασία. Πρέπει να είναι μια συμβολοσειρά, είτε "to" είτε "from".
getline Ορίζει το $0 από την επόμενη εγγραφή εισόδου· ορίζει τις τιμές των NF, NR, FNR, RT.
getline <αρχείο Ορίζει το $0 από την επόμενη εγγραφή του αρχείου· ορίζει τις τιμές των NF, RT.
getline μεταβλητή Ορίζει την τιμή της μεταβλητής από την επόμενη εγγραφή εισόδου· ορίζει τις τιμές των NR, FNR, RT.
getline μεταβλητή <αρχείο Ορίζει την τιμή της μεταβλητής από την επόμενη εγγραφή του αρχείου· ορίζει την τιμή του RT.
εντολή | getline [μεταβλητή]
Εκτελεί την εντολή, διοχετεύοντας την έξοδο είτε στο $0 είτε στη μεταβλητή, όπως παραπάνω, και στο RT.
εντολή |& getline [μεταβλητή]
Εκτελεί την εντολή ως υπο-διεργασία, διοχετεύοντας την έξοδο είτε στο $0 είτε στη μεταβλητή, όπως παραπάνω, και στο RT. (Η εντολή μπορεί επίσης να είναι μια υποδοχή (socket). Δείτε την υποενότητα Ειδικά Ονόματα Αρχείων, παρακάτω.)
fflush([αρχείο]) Εκκαθαρίζει τυχόν προσωρινές αποθήκες που σχετίζονται με το ανοιχτό αρχείο εξόδου ή τον σωλήνα. Εάν το αρχείο λείπει ή εάν είναι μια κενή συμβολοσειρά, τότε εκκαθαρίζει όλες τις ανοιχτές προσωρινές αποθήκες εξόδου και σωλήνων.
next Σταματά την επεξεργασία της τρέχουσας εγγραφής εισόδου. Διαβάζει την επόμενη εγγραφή εισόδου και ξεκινά την επεξεργασία με το πρώτο μοτίβο στο πρόγραμμα AWK. Όταν φτάσει στο τέλος των δεδομένων εισόδου, εκτελεί τυχόν κανόνες END.
nextfile Σταματά την επεξεργασία της τρέχουσας εγγραφής αρχείου. Η επόμενη εγγραφή εισόδου που θα διαβαστεί προέρχεται από το επόμενο αρχείο εισόδου. Ενημερώνει τις τιμές των FILENAME και ARGIND, επαναφέρει την τιμή του FNR σε 1 και ξεκινά την επεξεργασία με το πρώτο μοτίβο στο πρόγραμμα AWK. Όταν φτάσει στο τέλος των δεδομένων εισόδου, εκτελεί τυχόν κανόνες ENDFILE και END.
print Εκτυπώνει την τρέχουσα εγγραφή. Η εγγραφή εξόδου τερματίζεται με την τιμή του ORS.
print λίστα_εκφράσεων Εκτυπώνει τις εκφράσεις. Κάθε έκφραση διαχωρίζεται από την τιμή του OFS. Η εγγραφή εξόδου τερματίζεται με την τιμή του ORS.
print expr-list >file Εκτύπωση εκφράσεων σε αρχείο. Κάθε έκφραση διαχωρίζεται από την τιμή του
OFS. Η έξοδος καταγράφεται με την τιμή του ORS.
printf fmt, expr-list Μορφοποίηση και εκτύπωση.
printf fmt, expr-list >file
Μορφοποίηση και εκτύπωση σε αρχείο.
system(cmd-line) Εκτέλεση της εντολής cmd-line και επιστροφή της κατάστασης εξόδου. (Αυτό ενδέχεται να μην είναι
διαθέσιμο σε μη-POSIX συστήματα.) Δείτε το https://www.gnu.org/software/gawk/manual/html_node/I_002fO-Functions.html#I_002fO-Functions για τις πλήρεις λεπτομέρειες σχετικά με την κατάσταση εξόδου.
Επιπλέον ανακατευθύνσεις εξόδου επιτρέπονται για τις εντολές print και printf.
print ... >> file
Επισύναψη της εξόδου στο αρχείο.
print ... | command
Εγγραφή σε έναν σωλήνα.
print ... |& command
Αποστολή δεδομένων σε μια υπο-διαδικασία ή μια θύρα. (Δείτε επίσης την υποενότητα Ειδικά Ονόματα Αρχείων, παρακάτω.)
Η συνάρτηση getline επιστρέφει 1 σε περίπτωση επιτυχίας, 0 στο τέλος του αρχείου και -1 σε περίπτωση σφάλματος. Εάν η τιμή του errno(3) υποδεικνύει ότι η λειτουργία εισόδου/εξόδου μπορεί να επαναληφθεί και η PROCINFO["input", "RETRY"] είναι
ορισμένη, τότε επιστρέφεται -2 αντί για -1 και μπορεί να πραγματοποιηθούν περαιτέρω κλήσεις στην συνάρτηση getline. Σε περίπτωση
σφάλματος, το ERRNO ορίζεται σε μια συμβολοσειρά που περιγράφει το πρόβλημα.
ΣΗΜΕΙΩΣΗ: Η αποτυχία κατά την άνοιγμα μιας αμφίδρομης θύρας έχει ως αποτέλεσμα ένα μη θανατηφόρο σφάλμα που επιστρέφεται στην
κλήση συνάρτηση. Εάν χρησιμοποιείτε έναν σωλήνα, μια υπο-διαδικασία ή μια θύρα για την getline, ή από την print ή την printf
μέσα σε έναν βρόχο, πρέπει να χρησιμοποιήσετε την συνάρτηση close() για να δημιουργήσετε νέες παρουσίες της εντολής ή της θύρας. Η AWK δεν
κλείνει αυτόματα σωλήνες, θύρες ή υπο-διαδικασίες όταν επιστρέφουν EOF.
Οι εκδόσεις AWK της εντολής printf και της συνάρτησης sprintf() είναι παρόμοιες με αυτές της C. Για
λεπτομέρειες, δείτε το https://www.gnu.org/software/gawk/manual/html_node/Printf.html.
### Ειδικά Ονόματα Αρχείων
Κατά την εκτέλεση ανακατευθύνσεων εισόδου/εξόδου είτε από την εντολή print είτε από την printf σε ένα αρχείο ή μέσω της getline από ένα αρχείο,
η gawk αναγνωρίζει ορισμένα ειδικά ονόματα αρχείων εσωτερικά. Αυτά τα ονόματα αρχείων επιτρέπουν την πρόσβαση σε ανοιχτές περιγραφές αρχείων που έχουν κληρονομηθεί από την αρχική διαδικασία της gawk (συνήθως το κέλυφος). Αυτά τα ονόματα αρχείων μπορούν επίσης να χρησιμοποιηθούν στην γραμμή εντολών για την ονομασία αρχείων δεδομένων. Τα ονόματα αρχείων είναι:
- Η τυπική είσοδος.
/dev/stdin Η τυπική είσοδος.
/dev/stdout Η τυπική έξοδος.
/dev/stderr Η τυπική έξοδος σφαλμάτων.
/dev/fd/n Το αρχείο που σχετίζεται με την ανοιχτή περιγραφή αρχείου n.
Τα ακόλουθα ειδικά ονόματα αρχείων μπορούν να χρησιμοποιηθούν με τον τελεστή |& της υπο-διαδικασίας για τη δημιουργία συνδέσεων TCP/IP:
/inet/tcp/lport/rhost/rport
/inet4/tcp/lport/rhost/rport
/inet6/tcp/lport/rhost/rport
Αρχεία για μια σύνδεση TCP/IP στην τοπική θύρα lport προς τον απομακρυσμένο υπολογιστή rhost στην απομακρυσμένη θύρα
rport. Χρησιμοποιήστε μια θύρα 0 για να αφήσετε το σύστημα να επιλέξει μια θύρα. Χρησιμοποιήστε το /inet4 για να επιβάλλετε μια σύνδεση IPv4 και το /inet6 για να επιβάλλετε μια σύνδεση IPv6. Η απλή χρήση του /inet χρησιμοποιεί την προεπιλογή του συστήματος
(πιθανότατα IPv4). Χρησιμοποιείται μόνο με τον αμφίδρομο τελεστή εισόδου/εξόδου |&.
/inet/udp/lport/rhost/rport
/inet4/udp/lport/rhost/rport
/inet6/udp/lport/rhost/rport
Παρόμοια, αλλά χρησιμοποιήστε το UDP/IP αντί για το TCP/IP.
Αριθμητικές Συναρτήσεις
Η AWK διαθέτει τις ακόλουθες ενσωματωμένες αριθμητικές συναρτήσεις:
atan2(y, x) Επιστρέφει την αντίστροφη εφαπτομένη του y/x σε ακτίνια.
cos(expr) Επιστρέφει το συνημίτονο του expr, το οποίο είναι σε ακτίνια.
exp(expr) Η εκθετική συνάρτηση.
int(expr) Περικόπτει σε ακέραιο αριθμό.
log(expr) Η φυσική λογαριθμική συνάρτηση.
rand() Επιστρέφει έναν τυχαίο αριθμό N, μεταξύ μηδέν και ενός, έτσι ώστε 0 ≤ N < 1.
sin(expr) Επιστρέφει το ημίτονο του expr, το οποίο είναι σε ακτίνια.
sqrt(expr) Επιστρέφει την τετραγωνική ρίζα του expr.
srand([expr]) Χρησιμοποιεί το expr ως τη νέα αρχική τιμή για τη γεννήτρια τυχαίων αριθμών. Εάν δεν παρέχεται το expr, χρησιμοποιεί την ώρα της ημέρας. Επιστρέφει την προηγούμενη αρχική τιμή για τη γεννήτρια τυχαίων αριθμών.
Συναρτήσεις Συμβολοσειρών
Η Gawk διαθέτει τις ακόλουθες ενσωματωμένες συναρτήσεις συμβολοσειρών. οι λεπτομέρειες παρέχονται στο [https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html].
asort(s [, d [, how] ]) Επιστρέφει τον αριθμό των στοιχείων στον πίνακα προέλευσης s. Ταξινομεί τα περιεχόμενα του s χρησιμοποιώντας τους κανονικούς κανόνες της gawk για τη σύγκριση τιμών και αντικαθιστά τους δείκτες των ταξινομημένων τιμών s με διαδοχικούς ακεραίους που ξεκινούν από το 1. Εάν καθοριστεί ο προαιρετικός πίνακας προορισμού d, πρώτα αντιγράφει το s στο d και, στη συνέχεια, ταξινομεί το d, αφήνοντας τους δείκτες του πίνακα προέλευσης s αμετάβλητους. Η προαιρετική συμβολοσειρά how ελέγχει την κατεύθυνση και τη λειτουργία σύγκρισης. Οι έγκυρες τιμές για το how περιγράφονται στο [https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions](https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions). Τα s και d επιτρέπεται να είναι ο ίδιος πίνακας. αυτό έχει νόημα μόνο όταν παρέχεται το τρίτο όρισμα.
asorti(s [, d [, how] ])
Επιστρέφει τον αριθμό των στοιχείων στον πίνακα προέλευσης s. Η συμπεριφορά είναι η ίδια με αυτή της asort(), εκτός από το ότι οι δείκτες πίνακα χρησιμοποιούνται για την ταξινόμηση, όχι οι τιμές πίνακα. Όταν ολοκληρωθεί, ο πίνακας έχει αριθμητικούς δείκτες και οι τιμές είναι αυτές των αρχικών δεικτών. Οι αρχικές τιμές χάνονται. επομένως, παρέχετε έναν δεύτερο πίνακα εάν θέλετε να διατηρήσετε τις αρχικές τιμές. Ο σκοπός της προαιρετικής συμβολοσειράς how είναι ο ίδιος με αυτόν της asort(). Και εδώ, τα s και d επιτρέπεται να είναι ο ίδιος πίνακας. αυτό έχει νόημα μόνο όταν παρέχεται το τρίτο όρισμα.
gensub(r, s, h [, t]) Αναζητά στη συμβολοσειρά προορισμού t για αντιστοιχίες της κανονικής έκφρασης r. Εάν το h είναι μια συμβολοσειρά που ξεκινά με g ή G, τότε αντικαθιστά όλες τις αντιστοιχίες του r με το s. Διαφορετικά, το h είναι ένας αριθμός που υποδεικνύει ποια αντιστοιχία του r θα αντικατασταθεί. Εάν δεν παρέχεται το t, χρησιμοποιεί το $0 αντ' αυτού. Μέσα στο κείμενο αντικατάστασης s, η ακολουθία \n, όπου το n είναι ένα ψηφίο από το 1 έως το 9, μπορεί να χρησιμοποιηθεί για να υποδείξει μόνο το κείμενο που αντιστοιχούσε στην n-οστική παρενθετική υποέκφραση. Η ακολουθία \0 αντιπροσωπεύει ολόκληρο το αντίστοιχο κείμενο, όπως και ο χαρακτήρας &. Σε αντίθεση με τις συναρτήσεις sub() και gsub(), η τροποποιημένη συμβολοσειρά επιστρέφεται ως αποτέλεσμα της συνάρτησης και η αρχική συμβολοσειρά προορισμού δεν αλλάζει.
gsub(r, s [, t]) Για κάθε υποσυμβολοσειρά που ταιριάζει με την κανονική έκφραση r στην συμβολοσειρά t, αντικαταστήστε την με την συμβολοσειρά s και επιστρέψτε τον αριθμό των αντικαταστάσεων. Εάν δεν δοθεί η t, χρησιμοποιήστε το $0. Ένα & στο κείμενο αντικατάστασης αντικαθίσταται με το κείμενο που αντιστοιχούσε στην πραγματικότητα. Χρησιμοποιήστε \& για να λάβετε ένα κυριολεκτικό &. (Αυτό πρέπει να πληκτρολογηθεί ως "\&"; δείτε την [https://www.gnu.org/software/gawk/manual/html_node/Gory-Details.html#Gory-Details] για μια πληρέστερη συζήτηση των κανόνων για τα ampersands και τις κάθετες γραμμές στο κείμενο αντικατάστασης των sub(), gsub() και gensub().)
index(s, t) Επιστρέφει την θέση της συμβολοσειράς t στην συμβολοσειρά s, ή μηδέν εάν η t δεν υπάρχει. (Αυτό υποδηλώνει ότι οι δείκτες χαρακτήρων ξεκινούν από το ένα.)
length([s]) Επιστρέφει το μήκος της συμβολοσειράς s, ή το μήκος του $0 εάν δεν δοθεί η s. Με ένα όρισμα πίνακα, η length() επιστρέφει τον αριθμό των στοιχείων στον πίνακα.
match(s, r [, a]) Επιστρέφει την θέση στην s όπου εμφανίζεται η κανονική έκφραση r, ή μηδέν εάν η r δεν υπάρχει, και ορίζει τις τιμές των RSTART και RLENGTH. Σημειώστε ότι η σειρά των ορισμάτων είναι η ίδια με αυτή του τελεστή ~: str ~ re. Δείτε το [https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions] για μια περιγραφή του τρόπου με τον οποίο ο πίνακας a συμπληρώνεται εάν παρέχεται.
patsplit(s, a [, r [, seps] ]) Διαιρεί την συμβολοσειρά s στον πίνακα a και τον πίνακα διαχωριστικών seps με βάση την κανονική έκφραση r και επιστρέφει τον αριθμό των πεδίων. Οι τιμές των στοιχείων είναι τα τμήματα της s που ταιριάζουν με την r. Η τιμή του seps[i] είναι ο πιθανώς κενός διαχωριστής που εμφανίζεται μετά το a[i]. Η τιμή του seps[0] είναι ο πιθανώς κενός αρχικός διαχωριστής. Εάν η r παραλειφθεί, χρησιμοποιείται το FPAT. Οι πίνακες a και seps διαγράφονται πρώτα. Η διάσπαση συμπεριφέρεται ακριβώς όπως η διάσπαση πεδίων με το FPAT.
split(s, a [, r [, seps] ]) Διαιρεί την συμβολοσειρά s στον πίνακα a και τον πίνακα διαχωριστικών seps με βάση την κανονική έκφραση r και επιστρέφει τον αριθμό των πεδίων. Εάν η r παραλειφθεί, χρησιμοποιείται το FS. Οι πίνακες a και seps διαγράφονται πρώτα. Το seps[i] είναι ο διαχωριστής πεδίου που ταιριάζει με την r μεταξύ των a[i] και a[i+1]. Η διάσπαση συμπεριφέρεται ακριβώς όπως η διάσπαση πεδίων.
sprintf(fmt, expr-list) Εκτυπώνει την expr-list σύμφωνα με το fmt και επιστρέφει την προκύπτουσα συμβολοσειρά.
strtonum(str) Εξετάζει την str και επιστρέφει την αριθμητική της τιμή. Εάν η str ξεκινά με ένα αρχικό 0, αντιμετωπίστε την ως δεκαεξαδική. Εάν η str ξεκινά με ένα αρχικό 0x ή 0X, αντιμετωπίστε την ως δεκαεξαδική. Διαφορετικά, υποθέστε ότι είναι δεκαδικός αριθμός.
sub(r, s [, t]) Ακριβώς όπως το gsub(), αλλά αντικαταστήστε μόνο την πρώτη υποσυμβολοσειρά που ταιριάζει. Επιστρέψτε είτε μηδέν είτε ένα.
substr(s, i [, n]) Επιστρέφει το υποσύνολο της s μήκους το πολύ n, ξεκινώντας από το i. Εάν το n παραλειφθεί, χρησιμοποιήστε το υπόλοιπο της s.
tolower(str) Επιστρέφει ένα αντίγραφο της συμβολοσειράς str, με όλους τους κεφαλαίους χαρακτήρες στην str να μετατρέπονται στις αντίστοιχες μικρές μορφές τους. Οι μη αλφαβητικοί χαρακτήρες παραμένουν αμετάβλητοι.
toupper(str) Επιστρέφει ένα αντίγραφο της συμβολοσειράς str, με όλους τους μικρούς χαρακτήρες στην str να μετατρέπονται στις αντίστοιχες μεγάλες μορφές τους. Οι μη αλφαβητικοί χαρακτήρες παραμένουν αμετάβλητοι.
Η Gawk υποστηρίζει multibyte. Αυτό σημαίνει ότι οι συναρτήσεις index(), length(), substr() και match() λειτουργούν με βάση τους χαρακτήρες και όχι τα byte.
Συναρτήσεις Χρόνου
Η Gawk παρέχει τις ακόλουθες συναρτήσεις για την απόκτηση χρονικών σημάνσεων και τη μορφοποίησή τους. Οι λεπτομέρειες παρέχονται στη διεύθυνση https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.
mktime(datespec [, utc-flag])
Μετατρέπει το datespec σε χρονική σήμανση της ίδιας μορφής με αυτή που επιστρέφεται από τη συνάρτηση systime() και επιστρέφει το αποτέλεσμα. Εάν το utc-flag υπάρχει και είναι μη μηδενικό ή μη κενό, η ώρα θεωρείται ότι είναι στην ζώνη ώρας UTC. διαφορετικά, η ώρα θεωρείται ότι είναι στην τοπική ζώνη ώρας. Εάν το datespec δεν περιέχει αρκετά στοιχεία ή εάν η προκύπτουσα ώρα είναι εκτός εύρους, η συνάρτηση mktime() επιστρέφει -1. Δείτε την διεύθυνση https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.html#Time-Functions για τις λεπτομέρειες του datespec.
strftime([format [, timestamp[, utc-flag]]])
Μορφοποιεί το timestamp σύμφωνα με τις προδιαγραφές στο format. Εάν το utc-flag υπάρχει και είναι μη μηδενικό ή μη κενό, το αποτέλεσμα είναι σε UTC, διαφορετικά το αποτέλεσμα είναι στην τοπική ώρα. Το timestamp πρέπει να είναι της ίδιας μορφής με αυτή που επιστρέφεται από την συνάρτηση systime(). Εάν το timestamp λείπει, χρησιμοποιείται η τρέχουσα ώρα της ημέρας. Εάν το format λείπει, χρησιμοποιείται μια προεπιλεγμένη μορφή ισοδύναμη με την έξοδο της εντολής date(1). Η προεπιλεγμένη μορφή είναι διαθέσιμη στο PROCINFO["strftime"]. Δείτε τις προδιαγραφές για τη συνάρτηση strftime() στο ISO C για τις μετατροπές μορφής που είναι εγγυημένα διαθέσιμες.
systime() Επιστρέφει την τρέχουσα ώρα της ημέρας ως τον αριθμό των δευτερολέπτων από την Εποχή (1970-01-01 0000:00 UTC σε συστήματα POSIX).
Συναρτήσεις Διενεργειών σε Bit
Η Gawk παρέχει τις ακόλουθες συναρτήσεις διενεργειών σε bit. Λειτουργούν μετατρέποντας τις τιμές κινητής υποδιαστολής σε ακέραιους uintmax_t, εκτελώντας την λειτουργία και στη συνέχεια μετατρέποντας το αποτέλεσμα πίσω σε κινητή υποδιαστολή. Η χρήση αρνητικών τελεστών σε οποιαδήποτε από αυτές τις συναρτήσεις προκαλεί ένα θανατηφόρο σφάλμα.
Οι συναρτήσεις είναι:
and(v1, v2 [, ...]) Επιστρέφει την λογική συνάρτηση AND των τιμών που παρέχονται στη λίστα ορισμάτων. Πρέπει να υπάρχουν τουλάχιστον δύο.
compl(val) Επιστρέφει το συμπλήρωμα των bit της τιμής val.
lshift(val, count) Επιστρέφει την τιμή της μεταβλητής val, μετατοπισμένη προς τα αριστερά κατά count bit.
or(v1, v2 [, ...]) Επιστρέφει την λογική συνάρτηση OR των τιμών που παρέχονται στην λίστα ορισμάτων. Πρέπει να υπάρχουν τουλάχιστον δύο.
rshift(val, count) Επιστρέφει την τιμή της μεταβλητής val, μετατοπισμένη προς τα δεξιά κατά count bit.
xor(v1, v2 [, ...]) Επιστρέφει την λογική συνάρτηση XOR των τιμών που παρέχονται στην λίστα ορισμάτων. Πρέπει να υπάρχουν τουλάχιστον δύο.
Συναρτήσεις Τύπου
Οι ακόλουθες συναρτήσεις παρέχουν πληροφορίες σχετικά με τον τύπο των ορισμάτων τους.
isarray(x) Επιστρέφει true εάν το x είναι ένας πίνακας, αλλιώς επιστρέφει false.
typeof(x) Επιστρέφει μια συμβολοσειρά που υποδεικνύει τον τύπο του x. Η συμβολοσειρά θα είναι μία από τις: "array", "number", "regexp", "string", "strnum", "unassigned" ή "undefined".
Συναρτήσεις Διεθνοποίησης
Οι ακόλουθες συναρτήσεις μπορούν να χρησιμοποιηθούν μέσα στο πρόγραμμα AWK σας για τη μετάφραση συμβολοσειρών κατά τη διάρκεια εκτέλεσης. Για πλήρεις λεπτομέρειες, δείτε τη διεύθυνση https://www.gnu.org/software/gawk/manual/html_node/I18N-Functions.html#I18N-Functions.
bindtextdomain(directory [, domain])
Καθορίζει τον κατάλογο στον οποίο το gawk αναζητά τα αρχεία .gmo, σε περίπτωση που δεν μπορούν ή δεν πρέπει να τοποθετηθούν στις «τυπικές» θέσεις. Επιστρέφει τον κατάλογο όπου συνδέεται το domain. Η προεπιλεγμένη τιμή για το domain είναι η τιμή του TEXTDOMAIN. Εάν το directory είναι μια κενή συμβολοσειρά (""), τότε το bindtextdomain() επιστρέφει την τρέχουσα σύνδεση για το δεδομένο domain.
dcgettext(string [, domain [, category]])
Επιστρέφει τη μετάφραση της συμβολοσειράς string στον τομέα κειμένου domain για την κατηγορία locale category. Η προεπιλεγμένη τιμή για το domain είναι η τρέχουσα τιμή του TEXTDOMAIN. Η προεπιλεγμένη τιμή για το category είναι "LC_MESSAGES".
dcngettext(string1, string2, number [, domain [, category]])
Επιστρέφει την πληθυντική μορφή που χρησιμοποιείται για τον αριθμό number της μετάφρασης των συμβολοσειρών string1 και string2 στον τομέα κειμένου domain για την κατηγορία locale category. Η προεπιλεγμένη τιμή για το domain είναι η τρέχουσα τιμή του TEXTDOMAIN. Η προεπιλεγμένη τιμή για το category είναι "LC_MESSAGES".
Συναρτήσεις με τιμή αληθούς/ψευδούς
Μπορείτε να δημιουργήσετε ειδικές τιμές τύπου Boolean. Δείτε το εγχειρίδιο για να μάθετε πώς λειτουργούν και γιατί υπάρχουν.
mkbool(expression)
Με βάση την τιμή αληθούς/ψευδούς της έκφρασης expression, επιστρέφει είτε μια τιμή αληθούς είτε μια τιμή ψευδούς. Οι τιμές αληθούς έχουν αριθμητική τιμή ένα. Οι τιμές ψευδούς έχουν αριθμητική τιμή μηδέν.
ΣΥΝΑΡΤΗΣΕΙΣ ΟΡΙΣΜΕΝΕΣ ΑΠΟ ΤΟΝ ΧΡΗΣΤΗ
Οι συναρτήσεις στο AWK ορίζονται ως εξής:
function name(parameter list) { statements }
Οι συναρτήσεις εκτελούνται όταν καλούνται μέσα σε εκφράσεις, είτε σε μοτίβα είτε σε ενέργειες. Οι πραγματικές παράμετροι που παρέχονται κατά την κλήση της συνάρτησης χρησιμοποιούνται για να οριστούν οι επίσημες παράμετροι που δηλώνονται στη συνάρτηση. Οι πίνακες περνούν με αναφορά, ενώ οι υπόλοιπες μεταβλητές περνούν με τιμή.
Οι τοπικές μεταβλητές δηλώνονται ως επιπλέον παράμετροι στη λίστα παραμέτρων. Η συνήθεια είναι να διαχωρίζονται οι τοπικές μεταβλητές από τις πραγματικές παραμέτρους με επιπλέον κενά στη λίστα παραμέτρων. Για παράδειγμα:
function f(p, q, a, b) # οι a και b είναι τοπικές
{
...
}
/abc/ { ... ; f(1, 2) ; ... }
Η αριστερή παρένθεση σε μια κλήση συνάρτησης απαιτείται να ακολουθεί αμέσως το όνομα της συνάρτησης, χωρίς να υπάρχει κανένας ενδιάμεσος κενός χώρος. Αυτός ο περιορισμός δεν ισχύει για τις ενσωματωμένες συναρτήσεις που αναφέρονται παραπάνω.
Οι συναρτήσεις μπορούν να καλούν η μία την άλλη και μπορούν να είναι αναδρομικές. Οι παράμετροι συνάρτησης που χρησιμοποιούνται ως τοπικές μεταβλητές αρχικοποιούνται στην κενή συμβολοσειρά και στον αριθμό μηδέν κατά την έναρξη της συνάρτησης.
Χρησιμοποιήστε την εντολή return expr για να επιστρέψετε μια τιμή από μια συνάρτηση. Η τιμή επιστροφής είναι απροσδιόριστη εάν δεν παρέχεται καμία τιμή ή εάν η συνάρτηση επιστρέφει «από το τέλος».
Οι συναρτήσεις μπορούν να καλούνται έμμεσα. Για να το κάνετε αυτό, αντιστοιχίστε το όνομα της συνάρτησης που θα κληθεί, ως μια συμβολοσειρά, σε μια μεταβλητή. Στη συνέχεια, χρησιμοποιήστε τη μεταβλητή σαν να ήταν το όνομα της συνάρτησης, με πρόθεμα το σύμβολο @, όπως εξής: function myfunc() { print "myfunc called" ... }
{ ...
the_func = "myfunc"
@the_func() # κλήση μέσω του the_func στο myfunc
...
}
Εάν έχει δοθεί η παράμετρος --lint, το gawk προειδοποιεί για κλήσεις σε μη ορισμένες συναρτήσεις κατά τη φάση ανάλυσης, αντί για τη φάση εκτέλεσης. Η κλήση μιας μη ορισμένης συνάρτησης κατά τη φάση εκτέλεσης είναι ένα θανατηφόρο σφάλμα.
ΔΥΝΑΜΙΚΗ ΦΟΡΤΩΣΗ ΝΕΩΝ ΣΥΝΑΡΤΗΣΕΩΝ
Μπορείτε να προσθέσετε δυναμικά νέες συναρτήσεις, γραμμένες σε C ή C++, στον εκτελούμενο διερμηνέα gawk με τη δήλωση @load. Οι πλήρεις λεπτομέρειες είναι πέρα από την εμβέλεια αυτής της σελίδας του εγχειριδίου· δείτε το https://www.gnu.org/software/gawk/manual/html_node/Dynamic-Extensions.html#Dynamic-Extensions.
ΣΗΜΑΤΑ
Το προφίλ gawk δέχεται δύο σήματα. Το SIGUSR1 προκαλεί τη δημιουργία ενός προφίλ και της στοίβας κλήσεων συναρτήσεων στο αρχείο προφίλ, το οποίο είναι είτε το awkprof.out, είτε οποιοδήποτε αρχείο έχει καθοριστεί με την επιλογή --profile. Στη συνέχεια, συνεχίζει να εκτελείται. Το SIGHUP προκαλεί τη δημιουργία του προφίλ και της στοίβας κλήσεων συναρτήσεων και στη συνέχεια τερματίζει το gawk.
ΔΙΕΘΝΟΠΟΙΗΣΗ
Οι σταθερές συμβολοσειρές είναι ακολουθίες χαρακτήρων που περικλείονται σε διπλά εισαγωγικά. Σε περιβάλλοντα μη αγγλόφωνα, είναι δυνατό να επισημανθούν συμβολοσειρές στο πρόγραμμα AWK, ώστε να απαιτείται μετάφραση στην τοπική γλώσσα. Αυτές οι συμβολοσειρές επισημαίνονται στο πρόγραμμα AWK με ένα αρχικό υπογράμμιση (“_”). Για παράδειγμα,
gawk 'BEGIN { print "hello, world" }'
εκτυπώνει πάντα το hello, world. Αλλά,
gawk 'BEGIN { print _"hello, world" }'
μπορεί να εκτυπώσει το bonjour, monde στη Γαλλία. Δείτε το https://www.gnu.org/software/gawk/manual/html_node/Internationalization.html#Internationalization για τα βήματα που εμπλέκονται στην παραγωγή και εκτέλεση ενός προγράμματος AWK που μπορεί να εντοπιστεί τοπικά.
ΕΠΕΚΤΑΣΕΙΣ GNU
Το Gawk έχει έναν υπερβολικά μεγάλο αριθμό επεκτάσεων στο POSIX awk. Αυτές περιγράφονται στο https://www.gnu.org/software/gawk/manual/html_node/POSIX_002fGNU.html. Όλες οι επεκτάσεις μπορούν να απενεργοποιηθούν καλώντας το gawk με τις επιλογές --traditional ή --posix.
ΜΕΤΑΒΛΗΤΕΣ ΠΕΡΙΒΑΛΛΟΝΤΟΣ
Η μεταβλητή περιβάλλοντος AWKPATH μπορεί να χρησιμοποιηθεί για να παρέχει μια λίστα καταλόγων που το gawk αναζητά όταν αναζητά αρχεία με ονόματα μέσω των επιλογών -f, --file, -i και --include, καθώς και της οδηγίας @include. Εάν η αρχική αναζήτηση αποτύχει, η διαδρομή αναζητείται ξανά μετά την προσθήκη του .awk στο όνομα του αρχείου.
Η μεταβλητή περιβάλλοντος AWKLIBPATH μπορεί να χρησιμοποιηθεί για να παρέχει μια λίστα καταλόγων που το gawk αναζητά όταν αναζητά αρχεία με ονόματα μέσω των επιλογών -l και --load.
Η μεταβλητή περιβάλλοντος GAWK_PERSIST_FILE, εάν υπάρχει, καθορίζει ένα αρχείο που θα χρησιμοποιηθεί ως αποθηκευτικός χώρος για τη μνήμη που διατηρείται. Δείτε το GAWK: Effective AWK Programming για περισσότερες λεπτομέρειες.
Η μεταβλητή περιβάλλοντος GAWK_READ_TIMEOUT μπορεί να χρησιμοποιηθεί για να καθορίσει ένα χρονικό όριο σε χιλιοστά του δευτερολέπτου για την ανάγνωση εισόδου από ένα τερματικό, μια σωλήνα ή μια αμφίδρομη επικοινωνία, συμπεριλαμβανομένων των υποδοχών.
Για τη σύνδεση σε έναν απομακρυσμένο κεντρικό υπολογιστή μέσω υποδοχής, η GAWK_SOCK_RETRIES ελέγχει τον αριθμό των επαναλήψεων και η GAWK_MSEC_SLEEP το διάστημα μεταξύ των επαναλήψεων. Το διάστημα είναι σε χιλιοστά του δευτερολέπτου. Σε συστήματα που δεν υποστηρίζουν την usleep(3), η τιμή στρογγυλοποιείται στον πλησιέστερο ακέραιο αριθμό δευτερολέπτων.
Εάν το POSIXLY_CORRECT υπάρχει στο περιβάλλον, τότε η gawk συμπεριφέρεται ακριβώς σαν να είχε καθοριστεί η --posix στη γραμμή εντολών. Εάν έχει καθοριστεί η --lint, η gawk εκδίδει ένα μήνυμα προειδοποίησης προς αυτή την κατεύθυνση.
ΚΑΤΑΣΤΑΣΗ ΕΞΟΔΟΥ
Εάν η εντολή exit χρησιμοποιείται με μια τιμή, τότε η gawk τερματίζεται με την αριθμητική τιμή που της δίνεται.
Διαφορετικά, εάν δεν υπήρξαν προβλήματα κατά την εκτέλεση, η gawk τερματίζεται με την τιμή της σταθεράς C EXIT_SUCCESS. Αυτό συνήθως είναι μηδέν.
Εάν παρουσιαστεί ένα σφάλμα, η gawk τερματίζεται με την τιμή της σταθεράς C EXIT_FAILURE. Αυτό συνήθως είναι ένα.
Εάν η gawk τερματιστεί λόγω ενός θανατηφόρου σφάλματος, η κατάσταση εξόδου είναι 2. Σε μη-POSIX συστήματα, αυτή η τιμή μπορεί να αντιστοιχιστεί στην EXIT_FAILURE.
ΠΛΗΡΟΦΟΡΙΕΣ ΕΚΔΟΣΗΣ
Αυτή η σελίδα man τεκμηριώνει την gawk, έκδοση 5.3.
ΣΥΓΓΡΑΦΕΙΣ
Η αρχική έκδοση του UNIX awk σχεδιάστηκε και υλοποιήθηκε από τους Alfred Aho, Peter Weinberger και Brian Kernighan της Bell Laboratories. Ο Ozan Yigit είναι ο τρέχων συντηρητής. Ο Brian Kernighan κατά καιρούς ασχολείται με την ανάπτυξή της.
Οι Paul Rubin και Jay Fenlason, από το Free Software Foundation, έγραψαν την gawk, για να είναι συμβατή με την αρχική έκδοση της awk που διανεμήθηκε στο Seventh Edition UNIX. Ο John Woods συνέβαλε σε μια σειρά από διορθώσεις σφαλμάτων. Οι David Trueman, με συνεισφορές από τον Arnold Robbins, έκαναν την gawk συμβατή με την νέα έκδοση του UNIX awk. Ο Arnold Robbins είναι ο τρέχων συντηρητής.
Δείτε το GAWK: Effective AWK Programming για μια πλήρη λίστα των συνεισφερόντων στην gawk και στην τεκμηρίωσή της.
Δείτε το αρχείο README στην διανομή της gawk για ενημερωμένες πληροφορίες σχετικά με τους συντηρητές και ποιες θύρες υποστηρίζονται επί του παρόντος.
ΑΝΑΦΟΡΕΣ ΣΦΑΛΜΑΤΩΝ ΚΑΙ ΕΡΩΤΗΣΕΙΣ
Εάν βρείτε ένα σφάλμα στην gawk, χρησιμοποιήστε το πρόγραμμα gawkbug(1) για να το αναφέρετε.
Πλήρεις οδηγίες για την αναφορά ενός σφάλματος παρέχονται στην https://www.gnu.org/software/gawk/manual/html_node/Bugs.html. Διαβάστε προσεκτικά και ακολουθήστε τις οδηγίες που δίνονται εκεί. Αυτό θα διευκολύνει την αναφορά και την επίλυση σφαλμάτων για όλους τους εμπλεκόμενους. Πραγματικά.
Από την άλλη πλευρά, εάν έχετε μια ερώτηση σχετικά με το πώς να επιτύχετε μια συγκεκριμένη εργασία χρησιμοποιώντας την awk ή την gawk, στείλτε ένα email στην διεύθυνση _ με το αίτημά σας για βοήθεια.
ΣΦΑΛΜΑΤΑ
Η επιλογή -F δεν είναι απαραίτητη δεδομένης της λειτουργίας ανάθεσης μεταβλητών στη γραμμή εντολών. παραμένει μόνο για λόγους συμβατότητας.
Αυτή η σελίδα man είναι πολύ μεγάλη. η gawk έχει πάρα πολλές δυνατότητες.
ΔΕΙΤΕ ΕΠΙΣΗΣ
egrep(1), sed(1), gawkbug(1), printf(3) και strftime(3).
The AWK Programming Language, δεύτερη έκδοση, Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger, Addison-Wesley, 2023. ISBN 9-780138-269722.
GAWK: Effective AWK Programming, Έκδοση 5.3, αποστέλλεται με την πηγή της gawk. Η τρέχουσα έκδοση αυτού του εγγράφου είναι διαθέσιμη στο διαδίκτυο στη διεύθυνση https://www.gnu.org/software/gawk/manual.
Η τεκμηρίωση του GNU gettext είναι διαθέσιμη στο διαδίκτυο στη διεύθυνση https://www.gnu.org/software/gettext.
ΠΑΡΑΔΕΙΓΜΑΤΑ
Εμφάνιση και ταξινόμηση των ονομάτων σύνδεσης όλων των χρηστών:
BEGIN { FS = ":" }
{ print $1 | "sort" }
Μέτρηση γραμμών σε ένα αρχείο:
{ nlines++ }
END { print nlines }
Προθέστε σε κάθε γραμμή τον αριθμό της στο αρχείο:
{ print FNR, $0 }
Συνένωση και αρίθμηση γραμμών (μια παραλλαγή ενός θέματος):
{ print NR, $0 }
Εκτέλεση μιας εξωτερικής εντολής για συγκεκριμένες γραμμές δεδομένων:
tail -f access_log |
awk '/myhome.html/ { system("nmap " $1 ">> logdir/myhome.html") }'
ΔΙΚΑΙΩΜΑΤΑ ΑΝΤΙΓΡΑΦΗΣ
Πνευματικά δικαιώματα © 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005 2007, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 2024, 2025 Free Software Foundation, Inc.
Χορηγείται άδεια για τη δημιουργία και διανομή ακριβών αντιγράφων αυτής της σελίδας εγχειριδίου, υπό την προϋπόθεση ότι η ειδοποίηση πνευματικών δικαιωμάτων και η παρούσα ειδοποίηση άδειας διατηρούνται σε όλα τα αντίγραφα.
Χορηγείται άδεια για την αντιγραφή και διανομή τροποποιημένων εκδόσεων αυτής της σελίδας εγχειριδίου υπό τους όρους για ακριβή αντιγραφή, με την προϋπόθεση ότι ολόκληρο το προκύπτον παράγωγο έργο διανέμεται σύμφωνα με τους όρους μιας ειδοποίησης άδειας πανομοιότυπης με αυτήν.
Χορηγείται άδεια για την αντιγραφή και διανομή μεταφράσεων αυτής της σελίδας εγχειριδίου σε μια άλλη γλώσσα, υπό τις παραπάνω προϋποθέσεις για τροποποιημένες εκδόσεις, εκτός από το ότι αυτή η ειδοποίηση άδειας μπορεί να αναφερθεί σε μια μετάφραση που έχει εγκριθεί από το Ίδρυμα.