Μάθετε την εντολή Linux - gawk

Ονομα

gawk - γλώσσα σάρωσης και επεξεργασίας

Σύνοψη

gawk [επιλογές στυλ POSIX ή GNU] -f αρχείο αρχείου [ - ] ...
gawk [επιλογές στυλ POSIX ή GNU] [ - ] αρχείο κειμένου προγράμματος ...

pgawk [επιλογές στυλ POSIX ή GNU] -f αρχείου προγράμματος-αρχείου [ - ] ...
pgawk [επιλογές στυλ POSIX ή GNU] [ - ] αρχείο κειμένου προγράμματος ...

Περιγραφή

Το Gawk είναι η υλοποίηση της γλώσσας προγραμματισμού AWK από το Έργο GNU . Συμμορφώνεται με τον ορισμό της γλώσσας στο πρότυπο POSIX 1003.2 Command Language and Utilities Standard. Αυτή η έκδοση με τη σειρά της βασίζεται στην περιγραφή στη Γλώσσα Προγραμματισμού AWK , από τους Aho, Kernighan και Weinberger, με τα πρόσθετα χαρακτηριστικά που βρέθηκαν στην έκδοση System UN Release 4 του UNIX awk . Το Gawk παρέχει επίσης πιο πρόσφατες επεκτάσεις του Bell Laboratories awk και μια σειρά επεκτάσεων για το GNU.

Το Pgawk είναι η έκδοση προφίλ του gawk . Είναι πανομοιότυπο με κάθε τρόπο να ξεγελάσει , εκτός από το ότι τα προγράμματα τρέχουν πιο αργά, και αυτόματα παράγει ένα προφίλ εκτέλεσης στο αρχείο awkprof.out όταν τελειώσει. Δείτε την επιλογή --προφίλ , παρακάτω.

Η γραμμή εντολών αποτελείται από επιλογές για το ίδιο το gawk , το κείμενο του προγράμματος AWK (αν δεν παρέχεται μέσω των επιλογών -f ή -file ) και τις τιμές που πρέπει να διατεθούν στις προκαθορισμένες μεταβλητές AWK ARGC και ARGV .

Μορφή επιλογών

Οι επιλογές Gawk μπορεί να είναι είτε παραδοσιακές επιλογές POSIX με ένα γράμμα είτε επιλογές μακρινού στυλ GNU. Οι επιλογές POSIX ξεκινούν με ένα μόνο `` - '', ενώ οι μακριές επιλογές αρχίζουν με `` - ''. Παρέχονται μεγάλες επιλογές τόσο για τις λειτουργίες που σχετίζονται με το GNU όσο και για τις λειτουργίες με εντολή POSIX.

Σύμφωνα με το πρότυπο POSIX, οι πρόσθετες επιλογές που παρέχονται από το gawk παρέχονται μέσω παραμέτρων στην επιλογή -W . Μπορούν να παρασχεθούν επιλογές πολλαπλών -W Κάθε επιλογή -W έχει μια αντίστοιχη μακρά επιλογή, όπως περιγράφεται παρακάτω. Τα επιχειρήματα των μακρών επιλογών είτε συνδέονται με την επιλογή με το σύμβολο a = , χωρίς παρεμβαλλόμενα κενά, είτε μπορεί να παρέχονται στο επόμενο παράθυρο γραμμής εντολών. Οι μακρές επιλογές μπορεί να συντομευθούν, αρκεί η σύντμηση να παραμείνει μοναδική.

Επιλογές

Το Gawk δέχεται τις παρακάτω επιλογές, οι οποίες παρατίθενται αλφαβητικά.

-F fs

- field-separator fs Χρησιμοποιήστε το fs για τον διαχωριστή πεδίου εισαγωγής (η τιμή της προκαθορισμένης μεταβλητής FS ).

-v var = val

- assign var = val Αντιστοιχίστε την τιμή val στη μεταβλητή var , πριν ξεκινήσει η εκτέλεση του προγράμματος. Τέτοιες μεταβλητές τιμές είναι διαθέσιμες στο μπλοκ BEGIN ενός προγράμματος AWK.

-f αρχείο προγράμματος

- αρχείο προγράμματος αρχείου-αρχείο Διαβάστε την πηγή του προγράμματος AWK από το αρχείο του αρχείου , αντί για το πρώτο παράθυρο γραμμής εντολών. Μπορούν να χρησιμοποιηθούν επιλογές πολλαπλών -f (ή - αρχείων ).

-mf NNN

-mr NNN Ρυθμίστε διάφορα όρια μνήμης στην τιμή NNN . Η σημαία f ορίζει το μέγιστο αριθμό πεδίων και η σημαία r ορίζει το μέγιστο μέγεθος εγγραφής. Αυτές οι δύο σημαίες και η επιλογή -m προέρχονται από την ερευνητική έκδοση του Bell Laboratories του UNIX awk . Αγνοούνται από το gawk , αφού το gawk δεν έχει προκαθορισμένα όρια.

-W compat

-W παραδοσιακό

--compat

- Traditional Εκτέλεση σε λειτουργία συμβατότητας . Σε κατάσταση λειτουργίας συμβατότητας, το gawk συμπεριφέρεται ταυτόσημα με το UNIX awk . καμία από τις εξειδικευμένες επεκτάσεις GNU δεν αναγνωρίζεται. Η χρήση του - παραδοσιακού προτιμάται έναντι των άλλων μορφών αυτής της επιλογής. Ανατρέξτε στο GNU EXTENSIONS , παρακάτω, για περισσότερες πληροφορίες.

-W copyleft

-W πνευματικά δικαιώματα

--copyleft

--copyright Εκτυπώστε την σύντομη έκδοση του μηνύματος πληροφοριών πνευματικών δικαιωμάτων GNU στην τυπική έξοδο και βγείτε με επιτυχία.

-W μεταβλητές σφαλμάτων [ = αρχείο ]

--dump-variables [ = αρχείο ] Εκτύπωση μιας ταξινομημένης λίστας των μεταβλητών, των τύπων τους και των τελικών τιμών στο αρχείο . Αν δεν υπάρχει αρχείο , το gawk χρησιμοποιεί ένα αρχείο με όνομα awkvars.out στον τρέχοντα κατάλογο.

Έχοντας μια λίστα με όλες τις παγκόσμιες μεταβλητές είναι ένας καλός τρόπος να αναζητήσετε τυπογραφικά λάθη στα προγράμματά σας. Θα χρησιμοποιούσατε επίσης αυτήν την επιλογή εάν διαθέτετε ένα μεγάλο πρόγραμμα με πολλές λειτουργίες και θέλετε να είστε βέβαιοι ότι οι λειτουργίες σας δεν χρησιμοποιούν ακούσια τις παγκόσμιες μεταβλητές που προτίθεστε να είστε τοπικοί. (Αυτό είναι ένα ιδιαίτερα εύκολο λάθος να κάνετε με απλά ονόματα μεταβλητών όπως i , j , και ούτω καθεξής.)

-W βοήθεια

-W χρήση

--βοήθεια

--usage Εκτυπώστε μια σχετικά σύντομη περίληψη των διαθέσιμων επιλογών στην τυπική έξοδο. (Σύμφωνα με τα πρότυπα κωδικοποίησης GNU , αυτές οι επιλογές προκαλούν άμεση και επιτυχημένη έξοδο.)

-W χνούδι [ = θανατηφόρο ]

--lint [ = fatal ] Παρέχετε προειδοποιήσεις σχετικά με κατασκευές που είναι αμφίβολες ή μη φορητές σε άλλες εφαρμογές του AWK. Με ένα προαιρετικό επιχείρημα των θανατηφόρων , οι προειδοποιήσεις για χνούδια γίνονται θανάσιμα λάθη. Αυτό μπορεί να είναι δραστικό, αλλά η χρήση του θα ενθαρρύνει σίγουρα την ανάπτυξη καθαρότερων προγραμμάτων AWK.

-W χνούδι-παλιά

-lint-old Παρέχετε προειδοποιήσεις σχετικά με κατασκευές που δεν είναι φορητές στην αρχική έκδοση του Unix awk .

-W gen-po

--gen-po Σάρωση και ανάλυση του προγράμματος AWK και δημιουργία ενός αρχείου μορφής GNU .po σε τυποποιημένη έξοδο με καταχωρήσεις για όλες τις εντοπίσιμες σειρές του προγράμματος. Το ίδιο το πρόγραμμα δεν εκτελείται. Για περισσότερες πληροφορίες σχετικά με τα αρχεία .po δείτε τη διανομή του GNU gettext .

-W μη δεκαδικά δεδομένα

- μη-δεκαδικά δεδομένα Αναγνώριση οκταγωνικών και δεκαεξαδικών τιμών στα δεδομένα εισόδου. Χρησιμοποιήστε αυτή την επιλογή με μεγάλη προσοχή!

-W posix

--posix Αυτό ενεργοποιεί τη λειτουργία συμβατότητας , με τους ακόλουθους πρόσθετους περιορισμούς:

*

\ x Οι ακολουθίες διαφυγής δεν αναγνωρίζονται.

*

Μόνο ο χώρος και η καρτέλα λειτουργούν ως χωριστές πεδίων όταν ο FS είναι ρυθμισμένος σε ένα μόνο κενό.

*

Δεν μπορείτε να συνεχίσετε τις γραμμές μετά ; και :.

*

Το συνώνυμο func για τη λειτουργία λέξεων-κλειδιών δεν αναγνωρίζεται.

*

Οι χειριστές ** και ** = δεν μπορούν να χρησιμοποιηθούν αντί ^ και ^ = .

*

Η λειτουργία fflush () δεν είναι διαθέσιμη.

-W προφίλ [ = prof_file ]

--profile [ = prof_file ] Αποστολή δεδομένων προφίλ στο prof_file . Η προεπιλογή είναι awkprof.out . Όταν τρέχετε με το gawk , το προφίλ είναι απλά μια `` αρκετά τυπωμένη '' έκδοση του προγράμματος. Όταν τρέχετε με το pgawk , το προφίλ περιέχει μετρήσεις εκτέλεσης κάθε εντολής στο πρόγραμμα στο αριστερό περιθώριο και μετρήσεις κλήσεων λειτουργίας για κάθε συνάρτηση που ορίζει ο χρήστης.

-W επαν-διάστημα

- re-interval Ενεργοποιήστε τη χρήση των εκφράσεων διαστήματος στην αντιστοίχιση κανονικής έκφρασης (βλ. Κανονικές εκφράσεις , παρακάτω). Οι διαδοχικές εκφράσεις δεν ήταν παραδοσιακά διαθέσιμες στη γλώσσα AWK. Το πρότυπο POSIX τους προσέθεσε, για να καταστήσει το awk και το egrep συνεπές μεταξύ τους. Ωστόσο, η χρήση τους είναι πιθανό να παραβιάσει τα παλαιά προγράμματα AWK, οπότε ο gawk τους παρέχει μόνο εάν τους ζητηθεί με αυτή την επιλογή ή όταν έχει οριστεί --posix .

-W πρόγραμμα πηγαίου κειμένου

- source program-text Χρησιμοποιήστε το κείμενο του προγράμματος ως πηγαίο κώδικα του προγράμματος AWK. Αυτή η επιλογή επιτρέπει την εύκολη ανάμιξη των λειτουργιών της βιβλιοθήκης (που χρησιμοποιείται μέσω των επιλογών -f και -file ) με τον πηγαίο κώδικα που έχει εισαχθεί στη γραμμή εντολών. Προορίζεται κυρίως για μεσαία έως μεγάλα προγράμματα AWK που χρησιμοποιούνται σε δέσμες ενεργειών κελύφους.

-W έκδοση

--version Εκτύπωση πληροφοριών έκδοσης για αυτό το συγκεκριμένο αντίγραφο του gawk στην τυπική έξοδο. Αυτό είναι χρήσιμο κυρίως για να μάθετε εάν το τρέχον αντίγραφο του gawk στο σύστημά σας είναι ενημερωμένο σε σχέση με ό, τι διανέμει το Ίδρυμα Ελεύθερου Λογισμικού. Αυτό είναι επίσης χρήσιμο όταν αναφέρετε σφάλματα. (Σύμφωνα με τα πρότυπα κωδικοποίησης GNU , αυτές οι επιλογές προκαλούν άμεση και επιτυχημένη έξοδο.)

- Σηματοδοτήστε το τέλος των επιλογών. Αυτό είναι χρήσιμο για να επιτρέψει σε περαιτέρω επιχειρήματα στο ίδιο το πρόγραμμα AWK να ξεκινήσει με ένα `` - ''. Αυτό είναι κυρίως για λόγους συνέπειας με τη συνθήκη parsing argument που χρησιμοποιείται από τα περισσότερα άλλα προγράμματα POSIX.

Σε κατάσταση συμβατότητας, όλες οι άλλες επιλογές επισημαίνονται ως μη έγκυρες, αλλιώς αγνοούνται. Κατά την κανονική λειτουργία, εφόσον έχει παρασχεθεί κείμενο προγράμματος, οι άγνωστες επιλογές μεταβιβάζονται στο πρόγραμμα AWK στον πίνακα ARGV για επεξεργασία. Αυτό είναι ιδιαίτερα χρήσιμο για την εκτέλεση προγραμμάτων AWK μέσω του εκτελέσιμου μηχανισμού διερμηνείας ``!! ''.

ΥΛΟΠΟΙΗΣΗ ΠΡΟΓΡΑΜΜΑΤΟΣ AWK

Ένα πρόγραμμα AWK αποτελείται από μια ακολουθία δηλώσεων δράσης-προτύπου και προαιρετικούς ορισμούς λειτουργιών.

πρότυπο { δήλωση δράσης }

όνομα λειτουργίας ( λίστα παραμέτρων ) { statements }

Ο Gawk διαβάζει πρώτα την πηγή του προγράμματος από τα αρχεία του προγράμματος , αν έχει καθοριστεί, από τα επιχειρήματα σε --source ή από το πρώτο παράγωγο μη επιλογής στη γραμμή εντολών. Οι επιλογές -f και -source μπορούν να χρησιμοποιηθούν πολλές φορές στη γραμμή εντολών. Ο Gawk διαβάζει το κείμενο του προγράμματος σαν να είχαν όλα τα κείμενα πηγαίου προγράμματος και αρχείου γραμμής εντολών συναρμολογημένα μαζί. Αυτό είναι χρήσιμο για την κατασκευή βιβλιοθηκών των λειτουργιών AWK, χωρίς να χρειάζεται να τις συμπεριλάβετε σε κάθε νέο πρόγραμμα AWK που τις χρησιμοποιεί. Παρέχει επίσης τη δυνατότητα συγχώνευσης λειτουργιών βιβλιοθήκης με προγράμματα γραμμής εντολών.

Η μεταβλητή περιβάλλοντος AWKPATH καθορίζει μια διαδρομή αναζήτησης που χρησιμοποιείται κατά την εύρεση των αρχείων προέλευσης που ονομάζονται με την επιλογή -f . Εάν αυτή η μεταβλητή δεν υπάρχει, η προεπιλεγμένη διαδρομή είναι ".: / Usr / local / share / awk" . (Ο πραγματικός κατάλογος μπορεί να διαφέρει, ανάλογα με τον τρόπο κατασκευής και εγκατάστασης του gawk .) Εάν ένα όνομα αρχείου που δίνεται στην επιλογή -f περιέχει ένα χαρακτήρα "/", δεν γίνεται αναζήτηση στην κατεύθυνση.

Το Gawk εκτελεί προγράμματα AWK με την ακόλουθη σειρά. Πρώτον, εκτελούνται όλες οι μεταβλητές αναθέσεις που καθορίζονται μέσω της επιλογής -v . Στη συνέχεια, το gawk μεταγλωττίζει το πρόγραμμα σε μια εσωτερική φόρμα. Στη συνέχεια, ο gawk εκτελεί τον κώδικα στο μπλοκ BEGIN (αν υπάρχει) και στη συνέχεια συνεχίζει να διαβάζει κάθε αρχείο που ονομάζεται στον πίνακα ARGV . Αν δεν υπάρχουν αρχεία που ονομάζονται στη γραμμή εντολών, το gawk διαβάζει την τυπική είσοδο.

Εάν ένα όνομα αρχείου στη γραμμή εντολών έχει τη μορφή var = val , αντιμετωπίζεται ως μεταβλητή ανάθεση. Η μεταβλητή var θα έχει την τιμή val . (Αυτό συμβαίνει μετά την εκτέλεση κάθε μπλοκ BEGIN .) Η εκχώρηση μεταβλητής γραμμής εντολών είναι πολύ χρήσιμη για τη δυναμική αντιστοίχιση τιμών στις μεταβλητές που χρησιμοποιεί η AWK για τον έλεγχο του τρόπου κατανομής των εισροών σε πεδία και αρχεία. Είναι επίσης χρήσιμο για τον έλεγχο της κατάστασης αν χρειάζονται πολλαπλά περάσματα πάνω από ένα μόνο αρχείο δεδομένων.

Αν η τιμή ενός συγκεκριμένου στοιχείου του ARGV είναι κενή ( "" ), το gawk παραλείπει πάνω του.

Για κάθε εγγραφή στην είσοδο, εξετάζει το gawk για να διαπιστώσει εάν ταιριάζει με οποιοδήποτε πρότυπο στο πρόγραμμα AWK. Για κάθε μοτίβο που αντιστοιχεί στην εγγραφή, εκτελείται η σχετική ενέργεια . Τα πρότυπα ελέγχονται με τη σειρά που εμφανίζονται στο πρόγραμμα.

Τέλος, αφού εξαντληθεί όλη η είσοδος, ο gawk εκτελεί τον κώδικα στο μπλοκ END (εάν υπάρχει).

Μεταβλητές, αρχεία και πεδία

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

Εγγραφές

Κανονικά, τα αρχεία διαχωρίζονται με χαρακτήρες νέας γραμμής. Μπορείτε να ελέγξετε τον τρόπο διαχωρισμού των αρχείων, αναθέτοντας τιμές στην ενσωματωμένη μεταβλητή RS . Εάν το RS είναι οποιοσδήποτε μεμονωμένος χαρακτήρας, αυτός ο χαρακτήρας χωρίζει τις εγγραφές. Διαφορετικά, η RS είναι μια κανονική έκφραση. Το κείμενο στην είσοδο που ταιριάζει με αυτήν την κανονική έκφραση διαχωρίζει την εγγραφή. Ωστόσο, σε κατάσταση συμβατότητας, χρησιμοποιείται μόνο ο πρώτος χαρακτήρας της τιμής συμβολοσειράς για τον διαχωρισμό εγγραφών. Εάν η τιμή RS έχει οριστεί στη μηδενική συμβολοσειρά, τότε οι εγγραφές χωρίζονται από κενές γραμμές. Όταν το RS έχει οριστεί ως η μηδενική συμβολοσειρά, ο χαρακτήρας γραμμής νέας γραμμής λειτουργεί πάντα ως διαχωριστής πεδίων, επιπλέον της οποιασδήποτε τιμής FS μπορεί να έχει.

Πεδία

Καθώς διαβάζεται κάθε εγγραφή εισόδου, το gawk χωρίζει την εγγραφή σε πεδία , χρησιμοποιώντας την τιμή της μεταβλητής FS ως χωριστή πεδίου. Εάν το FS είναι ένα μόνο χαρακτήρα, τα πεδία διαχωρίζονται από αυτόν τον χαρακτήρα. Εάν το FS είναι η μηδενική συμβολοσειρά, τότε κάθε ξεχωριστός χαρακτήρας γίνεται ξεχωριστό πεδίο. Διαφορετικά, το FS αναμένεται να είναι μια πλήρη κανονική έκφραση. Στην ειδική περίπτωση που το FS είναι ένα ενιαίο διάστημα, τα πεδία διαχωρίζονται από διαστήματα ή / και καρτέλες ή / και νέες γραμμές. (Αλλά δείτε τη συζήτηση του --posix , παρακάτω). ΣΗΜΕΙΩΣΗ: Η τιμή του IGNORECASE (δείτε παρακάτω) επηρεάζει επίσης τον τρόπο κατανομής των πεδίων όταν το FS είναι μια κανονική έκφραση και τον τρόπο διαχωρισμού των αρχείων όταν η RS είναι κανονική έκφραση.

Εάν η μεταβλητή FIELDWIDTHS έχει οριστεί σε μια χωριστή λίστα αριθμών, κάθε πεδίο αναμένεται να έχει σταθερό πλάτος και το gawk χωρίζει την εγγραφή χρησιμοποιώντας τα καθορισμένα πλάτη. Η τιμή του FS αγνοείται. Η εκχώρηση μιας νέας τιμής στο FS υπερισχύει της χρήσης του FIELDWIDTHS και επαναφέρει την προεπιλεγμένη συμπεριφορά.

Κάθε πεδίο στην εγγραφή εισόδου μπορεί να αναφέρεται από τη θέση του, $ 1 , $ 2 , και ούτω καθεξής. Το $ 0 είναι ολόκληρο το αρχείο. Τα πεδία δεν πρέπει να αναφέρονται από σταθερές:

n = 5
print $ n

εκτυπώνει το πέμπτο πεδίο στην εγγραφή εισόδου.

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

Οι αναφορές σε ανύπαρκτα πεδία (δηλαδή πεδία μετά το $ NF ) παράγουν το null-string. Ωστόσο, η ανάθεση σε ένα ανύπαρκτο πεδίο (π.χ. $ (NF + 2) = 5 ) αυξάνει την τιμή του NF , δημιουργεί τυχόν παρεμβαλλόμενα πεδία με τη μηδενική συμβολοσειρά ως αξία τους και προκαλεί την αναπροσαρμογή της τιμής του $ 0 , με τα πεδία διαχωρίζονται από την τιμή του OFS . Οι αναφορές σε αρνητικά αριθμημένα πεδία προκαλούν ένα θανατηφόρο σφάλμα. Η μείωση του NF προκαλεί την απώλεια των τιμών των πεδίων που έχουν περάσει από τη νέα τιμή και την αξία του $ 0 που θα αναπληρωθεί, με τα πεδία να διαχωρίζονται από την τιμή OFS .

Η αντιστοίχιση μιας τιμής σε ένα υπάρχον πεδίο προκαλεί την ανοικοδόμηση ολόκληρης της εγγραφής όταν γίνεται αναφορά σε $ 0 . Ομοίως, η αντιστοίχιση τιμής σε $ 0 προκαλεί την επαναφορά της εγγραφής, δημιουργώντας νέες τιμές για τα πεδία.

Ενσωματωμένες μεταβλητές

Οι ενσωματωμένες μεταβλητές του Gawk είναι:

ARGC

Ο αριθμός των παραδειγμάτων της γραμμής εντολών (δεν περιλαμβάνει επιλογές για το gawk ή την πηγή του προγράμματος).

ARGIND

Ο κατάλογος του ARGV του τρέχοντος αρχείου που επεξεργάζεται.

ARGV

Πλαίσιο επιχειρήματα γραμμής εντολών. Ο πίνακας είναι ευρετηριασμένος από 0 έως ARGC - 1. Αλλάζοντας δυναμικά το περιεχόμενο του ARGV μπορεί να ελέγξει τα αρχεία που χρησιμοποιούνται για δεδομένα.

BINMODE

Σε συστήματα μη POSIX, καθορίζει τη χρήση της λειτουργίας `` binary '' για όλα τα I / O αρχεία. Οι αριθμητικές τιμές 1, 2 ή 3, καθορίζουν ότι τα αρχεία εισόδου, τα αρχεία εξόδου ή όλα τα αρχεία, αντίστοιχα, θα πρέπει να χρησιμοποιούν δυαδικά I / O. Οι τιμές των συμβολοσειρών "r" ή "w" καθορίζουν ότι τα αρχεία εισόδου ή τα αρχεία εξόδου, αντίστοιχα, πρέπει να χρησιμοποιούν δυαδικά I / O. Οι τιμές των συμβολοσειρών "rw" ή "wr" καθορίζουν ότι όλα τα αρχεία θα πρέπει να χρησιμοποιούν δυαδικά I / O. Κάθε άλλη τιμή συμβολοσειράς αντιμετωπίζεται ως "rw" , αλλά παράγει ένα προειδοποιητικό μήνυμα.

CONVFMT

Η μορφή μετατροπής για αριθμούς, "% .6g" , από προεπιλογή.

ΠΕΡΙΒΑΛΛΩ

Ένας πίνακας που περιέχει τις τιμές του τρέχοντος περιβάλλοντος. Ο πίνακας είναι ευρετηριασμένος από τις μεταβλητές περιβάλλοντος, κάθε στοιχείο είναι η τιμή αυτής της μεταβλητής (π.χ. ENVIRON ["HOME"] μπορεί να είναι / home / arnold ). Η αλλαγή αυτής της συστοιχίας δεν επηρεάζει το περιβάλλον που βλέπουν τα προγράμματα τα οποία αναδύονται μέσω της ανακατεύθυνσης ή της λειτουργίας του συστήματος () .

ERRNO

Εάν εμφανιστεί ένα σφάλμα συστήματος είτε κάνει μια ανακατεύθυνση για getline , κατά τη διάρκεια μιας ανάγνωσης για getline , ή κατά τη διάρκεια ενός κλεισίματος () , τότε το ERRNO θα περιέχει μια συμβολοσειρά που περιγράφει το σφάλμα. Η τιμή υπόκειται σε μετάφραση σε μη αγγλικές τοπικές ρυθμίσεις.

ΠΕΔΙΑ ΠΕΡΙΟΧΗΣ

Μια λίστα με χωράφια χωρισμένη σε λευκό χώρο. Όταν έχει οριστεί, το gawk αναλύει την είσοδο σε πεδία σταθερού πλάτους, αντί να χρησιμοποιεί την τιμή της μεταβλητής FS ως χωριστή πεδίου.

ΟΝΟΜΑ ΑΡΧΕΙΟΥ

Το όνομα του τρέχοντος αρχείου εισόδου. Εάν δεν έχουν οριστεί αρχεία στη γραμμή εντολών, η τιμή του FILENAME είναι `` - ''. Ωστόσο, το FILENAME δεν είναι προσδιορισμένο μέσα στο μπλοκ BEGIN (εκτός εάν έχει οριστεί από το getline ).

FNR

Ο αριθμός εγγραφής εισόδου στο τρέχον αρχείο εισόδου.

FS

Ο διαχωριστής πεδίου εισαγωγής, ένας χώρος από προεπιλογή. Δείτε τα πεδία παραπάνω.

IGNORECASE

Ελέγχει την ευαισθησία σε περίπτωση όλων των λειτουργιών κανονικής έκφρασης και στοιχειοσειράς. Αν το IGNORECASE έχει μια μη μηδενική τιμή, τότε οι αντιστοίχιση των συμβολοσειρών και η αντιστοίχιση των προτύπων σε κανόνες, ο διαχωρισμός πεδίων με FS , ο διαχωρισμός των εγγραφών με RS , η αντιστοίχιση κανονικής έκφρασης με τα ~ και ! ~ Και τα gensub () , gsub () , index , αντιστοίχιση () , split () και sub () ενσωματωμένες λειτουργίες αγνοούν όλες τις περιπτώσεις όταν πραγματοποιούν πράξεις κανονικής έκφρασης. ΣΗΜΕΙΩΣΗ: Δεν επηρεάζεται η υπογραφή του πίνακα, ούτε και η συνάρτηση asort () .

Έτσι, εάν το IGNORECASE δεν είναι ίσο με μηδέν, το / aB / ταιριάζει με όλες τις συμβολοσειρές "ab" , "aB" , "Ab" και "AB" . Όπως συμβαίνει με όλες τις μεταβλητές AWK, η αρχική τιμή του IGNORECASE είναι μηδενική, επομένως όλες οι λειτουργίες κανονικής έκφρασης και συμβολοσειράς είναι κανονικά πεζών-κεφαλαίων. Στο Unix, το πλήρες σύνολο χαρακτήρων ISO 8859-1 Latin-1 χρησιμοποιείται όταν αγνοείται περίπτωση.

ΣΤΟΥΠΙ

Παρέχει δυναμικό έλεγχο της επιλογής --lint μέσα σε ένα πρόγραμμα AWK. Όταν είναι αλήθεια, το gawk εκτυπώνει προειδοποιήσεις για χνούδια. Όταν είναι ψευδής, δεν συμβαίνει. Όταν εκχωρείται η τιμή συμβολοσειράς "θανατηφόρα" , οι προειδοποιήσεις χνούδις καθίστανται θανατηφόρα λάθη, ακριβώς όπως το - lint = θανατηφόρο . Οποιαδήποτε άλλη αληθινή αξία τυπώνει μόνο τις προειδοποιήσεις.

NF

Ο αριθμός των πεδίων στην τρέχουσα εγγραφή εισόδου.

NR

Ο συνολικός αριθμός των εγγραφών εισόδου που φαίνονται μέχρι τώρα.

OFMT

Η μορφή εξόδου για τους αριθμούς, "% .6g" , από προεπιλογή.

OFS

Ο διαχωριστής πεδίου εξόδου, ένας χώρος από προεπιλογή.

ORS

Ο διαχωριστής εγγραφών εξόδου, από προεπιλογή μια νέα γραμμή.

PROCINFO

Τα στοιχεία αυτής της συστοιχίας παρέχουν πρόσβαση σε πληροφορίες σχετικά με το τρέχον πρόγραμμα AWK. Σε ορισμένα συστήματα, μπορεί να υπάρχουν στοιχεία στη συστοιχία, "ομάδα1" έως "ομάδα n " για μερικά n , που είναι ο αριθμός των συμπληρωματικών ομάδων που έχει η διαδικασία. Χρησιμοποιήστε τον χειριστή για να ελέγξετε αυτά τα στοιχεία. Τα ακόλουθα στοιχεία είναι εγγυημένα διαθέσιμα:

PROCINFO ["egid"]

η τιμή της κλήσης συστήματος getegid (2).

PROCINFO ["euid"]

η τιμή της κλήσης συστήματος geteuid (2).

PROCINFO ["FS"]

"FS" σε περίπτωση διαχωρισμού πεδίου με FS , ή "FIELDWIDTHS" σε περίπτωση διαχωρισμού πεδίου με FIELDWIDTHS ισχύει.

PROCINFO ["gid"]

η τιμή της κλήσης συστήματος getgid (2).

PROCINFO ["pgrpid"]

το αναγνωριστικό ομάδας διαδικασίας της τρέχουσας διαδικασίας.

PROCINFO ["pid"]

το αναγνωριστικό διαδικασίας της τρέχουσας διαδικασίας.

PROCINFO ["ppid"]

το αναγνωριστικό γονικής διαδικασίας της τρέχουσας διαδικασίας.

PROCINFO ["uid"]

η τιμή της κλήσης συστήματος getuid (2).

RS

Ο διαχωριστής εγγραφών εισόδου, από προεπιλογή μια νέα γραμμή.

RT

Ο τερματιστής εγγραφής. Το Gawk θέτει RT στο κείμενο εισόδου που ταιριάζει με τον χαρακτήρα ή την κανονική έκφραση που καθορίζεται από το RS .

RSTART

Ο δείκτης του πρώτου χαρακτήρα που ταιριάζει με τον αγώνα () ; 0 αν δεν ταιριάζει. (Αυτό σημαίνει ότι οι δείκτες χαρακτήρων ξεκινούν από έναν.)

RLENGTH

Το μήκος της συμβολοσειράς που ταιριάζει με τον αγώνα () ; -1 αν δεν ταιριάζει.

SUBSEP

Ο χαρακτήρας που χρησιμοποιείται για το διαχωρισμό πολλαπλών δεικτών σε στοιχεία συστοιχίας, από προεπιλογή "\ 034" .

TEXTDOMAIN

Ο τομέας του κειμένου του προγράμματος AWK. χρησιμοποιείται για την εύρεση των τοπικών μεταφράσεων για τις χορδές του προγράμματος.

Array

Οι συστοιχίες είναι συνδρομητές με μια έκφραση ανάμεσα σε αγκύλες ( [ και ] ). Αν η έκφραση είναι μια λίστα εκφράσεων ( expr , expr ...), τότε ο δείκτης της συστοιχίας είναι μια συμβολοσειρά που αποτελείται από τη συνένωση της τιμής (string) κάθε έκφρασης, χωρισμένη από την τιμή της μεταβλητής SUBSEP . Αυτή η διευκόλυνση χρησιμοποιείται για την προσομοίωση συστοιχιών πολλαπλών διαστάσεων. Για παράδειγμα:

i = "Α". j = "Β". k = "C"
x [i, j, k] = "γεια, κόσμος \ n"

εκχωρεί τη συμβολοσειρά "hello, world \ n" στο στοιχείο του πίνακα x το οποίο είναι ευρετηριασμένο από τη συμβολοσειρά "A \ 034B \ 034C" . Όλες οι συστοιχίες στο AWK είναι συνεργατικές, δηλ. Αναπροσαρμόζονται από τις τιμές των συμβολοσειρών.

Ο ειδικός χειριστής μπορεί να χρησιμοποιηθεί σε δήλωση if ή while για να δει αν ένας πίνακας έχει δείκτη που αποτελείται από μια συγκεκριμένη τιμή.

εάν (val in array) πίνακας εκτύπωσης [val]

Αν ο πίνακας έχει πολλούς δείκτες, χρησιμοποιήστε (i, j) στη συστοιχία .

Το κατασκεύασμα μπορεί επίσης να χρησιμοποιηθεί σε ένα for loop για να επαναλάβει όλα τα στοιχεία μιας συστοιχίας.

Ένα στοιχείο μπορεί να διαγραφεί από έναν πίνακα χρησιμοποιώντας τη δήλωση διαγραφής . Η εντολή διαγραφής μπορεί επίσης να χρησιμοποιηθεί για τη διαγραφή ολόκληρου του περιεχομένου ενός πίνακα, μόνο με τον καθορισμό του ονόματος πίνακα χωρίς δείκτη.

Μεταβλητή πληκτρολόγηση και μετατροπή

Οι μεταβλητές και τα πεδία μπορεί να είναι αριθμοί (κινητής υποδιαστολής) ή σειρές ή και τα δύο. Η ερμηνεία της αξίας μιας μεταβλητής εξαρτάται από το πλαίσιο της. Αν χρησιμοποιηθεί σε μια αριθμητική έκφραση, θα θεωρηθεί ως ένας αριθμός, εάν χρησιμοποιηθεί ως συμβολοσειρά θα θεωρηθεί ως μια συμβολοσειρά.

Για να αναγκάσετε μια μεταβλητή να αντιμετωπιστεί ως αριθμός, προσθέστε 0 σε αυτήν. για να την αναγκάσουμε να την αντιμετωπίσουμε ως συμβολοσειρά, να την συγκολλήσουμε με τη μηδενική σειρά.

Όταν μια συμβολοσειρά πρέπει να μετατραπεί σε έναν αριθμό, η μετατροπή επιτυγχάνεται χρησιμοποιώντας το strtod (3). Ένας αριθμός μετατρέπεται σε μια συμβολοσειρά χρησιμοποιώντας την τιμή του CONVFMT ως συμβολοσειρά μορφής για το sprintf (3), με την αριθμητική τιμή της μεταβλητής ως το όρισμα. Ωστόσο, παρόλο που όλοι οι αριθμοί στο AWK είναι floating-point, οι ακέραιες τιμές μετατρέπονται πάντα ως ακέραιοι αριθμοί. Έτσι, δεδομένου

CONVFMT = "% 2.2f" α = 12 β = α ""

η μεταβλητή b έχει τιμή συμβολοσειράς "12" και όχι "12.00" .

Ο Gawk πραγματοποιεί συγκρίσεις ως εξής: Εάν δύο μεταβλητές είναι αριθμητικές, συγκρίνονται αριθμητικά. Εάν μια τιμή είναι αριθμητική και η άλλη έχει μια τιμή συμβολοσειράς που είναι μια "αριθμητική συμβολοσειρά", τότε οι συγκρίσεις γίνονται επίσης αριθμητικά. Διαφορετικά, η αριθμητική τιμή μετατρέπεται σε μια συμβολοσειρά και γίνεται μια σύγκριση συμβολοσειράς. Δύο χορδές συγκρίνονται, φυσικά, με τις χορδές. Σημειώστε ότι το πρότυπο POSIX εφαρμόζει την έννοια της «αριθμητικής συμβολοσειράς» παντού, ακόμη και σε σταθερές στοιχειοσειράς. Ωστόσο, αυτό είναι σαφώς εσφαλμένο, και το gawk δεν το κάνει αυτό. (Ευτυχώς, αυτό καθορίζεται στην επόμενη έκδοση του προτύπου.)

Σημειώστε ότι οι σταθερές στοιχειοσειρών, όπως "57" , δεν είναι αριθμητικές συμβολοσειρές, είναι σταθερές στοιχειοσειράς. Η ιδέα της `` αριθμητικής συμβολοσειράς '' ισχύει μόνο για τα πεδία, την είσοδο getline , τα στοιχεία FILENAME , ARGV, τα στοιχεία ENVIRON και τα στοιχεία ενός πίνακα που δημιουργήθηκε από split () που είναι αριθμητικές συμβολοσειρές. Η βασική ιδέα είναι ότι η είσοδος χρήστη και μόνο η είσοδος χρήστη, που φαίνεται αριθμητική, θα πρέπει να αντιμετωπιστεί με αυτόν τον τρόπο.

Οι μη αρχικές μεταβλητές έχουν την αριθμητική τιμή 0 και την τιμή συμβολοσειράς "" (η μηδενική ή κενή συμβολοσειρά).

Οκταγωνικά και δεκαεξαδικά στάδια

Ξεκινώντας με την έκδοση 3.1 του gawk, μπορείτε να χρησιμοποιήσετε οκταγωνικές και δεκαεξαδικές σταθερές τύπου C στον πηγαίο κώδικα του προγράμματος AWK. Για παράδειγμα, η οκταδική τιμή 011 είναι ίση με την δεκαδική τιμή 9 και η δεκαεξαδική τιμή 0x11 είναι ίση με δεκαδική τιμή 17.

Συμβατότητα στοιχειοσειράς

Οι σταθερές των συμβολοσειρών στο AWK είναι ακολουθίες χαρακτήρων που περικλείονται μεταξύ των διπλών εισαγωγικών ( " ). Μέσα σε συμβολοσειρές, αναγνωρίζονται ορισμένες ακολουθίες διαφυγής , όπως και στο C. Πρόκειται για:

\\

Μια κυριολεκτική ανάδραση.

\ένα

Ο χαρακτήρας `` alert '' συνήθως ο χαρακτήρας ASCII BEL.

\σι

backspace.

\φά

φόρτωση φόρμας.

\ n

νέα γραμμή.

\ r

επιστροφή της μεταφοράς.

\ t

οριζόντια καρτέλα.

\ v

κατακόρυφη καρτέλα.

\ x δεκαδικά ψηφία

Ο χαρακτήρας που αντιπροσωπεύεται από τη συμβολοσειρά δεκαεξαδικών ψηφίων που ακολουθούν το \ x . Όπως και στο ANSIC, όλα τα ακόλουθα δεκαεξαδικά ψηφία θεωρούνται μέρος της ακολουθίας διαφυγής. (Αυτό το χαρακτηριστικό θα πρέπει να μας πει κάτι για τον σχεδιασμό της γλώσσας από την επιτροπή.) Π.χ., "\ x1B" είναι ο χαρακτήρας ASCIIESC (διαφυγής).

\ ddd

Ο χαρακτήρας που αναπαρίσταται από την 1-, 2- ή 3-ψήφια ακολουθία των οκταγώνων. Π.χ. "\ 033" είναι ο χαρακτήρας ASCII ESC (διαφυγής).

\ γ

Ο κυριολεκτικός χαρακτήρας γ .

Οι ακολουθίες διαφυγής μπορούν επίσης να χρησιμοποιηθούν μέσα σε σταθερές κανονικές εκφράσεις (π.χ. / [\ t \ f \ n \ r \ v] / αντιστοιχεί χαρακτήρες κενών διαστημάτων).

Σε κατάσταση συμβατότητας, οι χαρακτήρες που αντιπροσωπεύονται από οκταετές και δεκαεξαδικές ακολουθίες διαφυγής αντιμετωπίζονται κυριολεκτικά όταν χρησιμοποιούνται σε σταθερές σταθερής έκφρασης. Έτσι, / a \ 52b / είναι ισοδύναμο με / a \ * b / .

Μοτίβα και Ενέργειες

Το AWK είναι μια γραμμική γλώσσα. Το σχέδιο έρχεται πρώτο, και στη συνέχεια η δράση. Οι δηλώσεις δράσης συνοδεύονται από { και } . Είτε το σχέδιο μπορεί να λείπει, είτε μπορεί να λείπει η ενέργεια, αλλά, φυσικά, όχι και οι δύο. Αν το πρότυπο λείπει, η ενέργεια εκτελείται για κάθε εγγραφή εισόδου. Μια ενέργεια που λείπει είναι ισοδύναμη με

{ Τυπώνω }

που εκτυπώνει ολόκληρη την εγγραφή.

Τα σχόλια αρχίζουν με τον χαρακτήρα "#" και συνεχίζονται μέχρι το τέλος της γραμμής. Μπορείτε να χρησιμοποιήσετε κενές γραμμές για να διαχωρίσετε τις δηλώσεις. Κανονικά, μια δήλωση τελειώνει με μια νέα γραμμή, ωστόσο, αυτό δεν συμβαίνει για γραμμές που τελειώνουν σε ένα ``, '', { , ? , : , && , ή || . Οι γραμμές που τελειώνουν ή αλλιώς έχουν και οι δηλώσεις τους συνεχίζονται αυτόματα στην ακόλουθη γραμμή. Σε άλλες περιπτώσεις, μια γραμμή μπορεί να συνεχιστεί τελειώνοντας με ένα ', οπότε η νέα γραμμή θα αγνοηθεί.

Πολλαπλές δηλώσεις μπορούν να τοποθετηθούν σε μία γραμμή διαχωρίζοντάς τις με ένα ``; ''. Αυτό ισχύει τόσο για τις δηλώσεις εντός του τμήματος δράσης ενός ζεύγους μοτίβου-δράσης (η συνηθισμένη περίπτωση) όσο και για τις ίδιες τις δηλώσεις δράσης.

Μοτίβα

Τα πρότυπα AWK μπορεί να είναι ένα από τα παρακάτω:

BEGIN END / κανονική έκφραση / μοτίβο σχεσιακής έκφρασης && μοτίβο μοτίβου || σχέδιο μοτίβο ; πρότυπο : μοτίβο ( μοτίβο ) ! σχέδιο μοτίβου1 , μοτίβο2

Το BEGIN και το END είναι δύο ειδικά είδη μοτίβων τα οποία δεν ελέγχονται από την είσοδο. Τα τμήματα δράσης όλων των μοτίβων BEGIN συγχωνεύονται σαν να είχαν γραφτεί όλες οι δηλώσεις σε ένα μόνο μπλοκ BEGIN . Εκτελούνται πριν από την ανάγνωση οποιασδήποτε από τις εισόδους. Παρομοίως, όλα τα τμήματα ΤΕΜ συγχωνεύονται και εκτελούνται όταν εξαντληθεί όλη η είσοδος (ή όταν εκτελείται μια δήλωση εξόδου ). Τα πρότυπα BEGIN και END δεν μπορούν να συνδυαστούν με άλλα μοτίβα στις εκφράσεις προτύπων. Τα πρότυπα BEGIN και END δεν μπορούν να έχουν τμήματα ενέργειας που λείπουν.

Για / κανονική έκφραση / πρότυπα, η σχετική δήλωση εκτελείται για κάθε εγγραφή εισόδου που ταιριάζει με την κανονική έκφραση. Οι κανονικές εκφράσεις είναι οι ίδιες με αυτές του egrep (1) και συνοψίζονται παρακάτω.

Μια σχεσιακή έκφραση μπορεί να χρησιμοποιήσει οποιονδήποτε από τους φορείς που ορίζονται παρακάτω στην ενότητα για τις ενέργειες. Αυτά γενικά ελέγχουν αν ορισμένα πεδία αντιστοιχούν σε ορισμένες κανονικές εκφράσεις.

Το && , || , και ! οι χειριστές είναι λογικοί AND, λογικοί OR και λογικοί NOT, αντίστοιχα, όπως και στο C. Κάνουν εκτίμηση βραχυκυκλώματος, επίσης όπως και στο C, και χρησιμοποιούνται για να συνδυάσουν πιο πρωτόγονες εκφράσεις προτύπων. Όπως στις περισσότερες γλώσσες, οι παρενθέσεις μπορούν να χρησιμοποιηθούν για να αλλάξουν τη σειρά αξιολόγησης.

Ο χειριστής?: Είναι ο ίδιος χειριστής στο C. Εάν το πρώτο μοτίβο είναι αληθινό τότε το μοτίβο που χρησιμοποιείται για τον έλεγχο είναι το δεύτερο μοτίβο, διαφορετικά είναι το τρίτο. Αποτιμάται μόνο ένα από τα δεύτερα και τρίτα πρότυπα.

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

Κανονικές εκφράσεις

Οι κανονικές εκφράσεις είναι το εκτεταμένο είδος που βρίσκεται στο egrep . Αποτελούνται από χαρακτήρες ως εξής:

ντο

ταιριάζει με το μη μεταχειριτικό c .

\ντο

αντιστοιχεί στον κυριολεκτικό χαρακτήρα c .

.

αντιστοιχεί σε οποιονδήποτε χαρακτήρα, συμπεριλαμβανομένης της νέας γραμμής.

^

αντιστοιχεί στην αρχή μιας συμβολοσειράς.

$

αντιστοιχεί στο τέλος μιας συμβολοσειράς.

[ abc ... ]

λίστα χαρακτήρων, αντιστοιχεί σε οποιονδήποτε από τους χαρακτήρες abc ....

[^ abc ... ]

αρνηθεί λίστα χαρακτήρων, αντιστοιχεί σε οποιοδήποτε χαρακτήρα εκτός abc ....

r1 | r2

εναλλαγή: αντιστοιχεί είτε στο r1 είτε στο r2 .

r1r2

συγκόλληση: αντιστοιχεί σε r1 , και στη συνέχεια r2 .

r +

αντιστοιχεί σε ένα ή περισσότερα r .

r *

αντιστοιχεί σε μηδέν ή περισσότερα r .

r ;

αντιστοιχεί σε μηδέν ή σε ένα r .

( r )

ομαδοποίηση: αντιστοιχίες r .

r { n }

r { n ,}

r { n , m } Ένας ή δύο αριθμοί μέσα σε τιράντες δηλώνουν μια έκφραση διαστήματος . Εάν υπάρχει ένας αριθμός στις αγκύλες, η προηγούμενη κανονική έκφραση r επαναλαμβάνεται n φορές. Εάν υπάρχουν δύο αριθμοί που χωρίζονται με κόμμα, το r επαναλαμβάνεται από n σε m φορές. Εάν υπάρχει ένας αριθμός ακολουθούμενος από κόμμα, τότε το r επαναλαμβάνεται τουλάχιστον n φορές.

Οι διαδοχικές εκφράσεις είναι διαθέσιμες μόνο αν καθορίζεται στη γραμμή εντολών είτε --posix είτε --re-interval .

\ y

αντιστοιχεί στην κενή συμβολοσειρά είτε στην αρχή είτε στο τέλος μιας λέξης.

\ΣΙ

αντιστοιχεί στην κενή συμβολοσειρά μέσα σε μια λέξη.

\ <

αντιστοιχεί στην κενή συμβολοσειρά στην αρχή μιας λέξης.

\>

αντιστοιχεί στην κενή συμβολοσειρά στο τέλος μιας λέξης.

\ w

αντιστοιχεί σε οποιοδήποτε χαρακτήρα λέξης-συστατικού (γράμμα, ψηφίο ή υπογράμμιση).

\ W

αντιστοιχεί σε οποιονδήποτε χαρακτήρα που δεν είναι λέξη-συστατικό.

\ "

αντιστοιχεί στην κενή συμβολοσειρά στην αρχή ενός buffer (string).

\ '

αντιστοιχεί στην κενή συμβολοσειρά στο τέλος ενός buffer.

Οι ακολουθίες διαφυγής που ισχύουν σε σταθερές στοιχειοσειρών (βλ. Παρακάτω) ισχύουν επίσης σε κανονικές εκφράσεις.

Οι κατηγορίες χαρακτήρων είναι μια νέα λειτουργία που εισάγεται στο πρότυπο POSIX. Μια κλάση χαρακτήρων είναι μια ειδική σημείωση για την περιγραφή λιστών χαρακτήρων που έχουν ένα συγκεκριμένο χαρακτηριστικό, αλλά όπου οι ίδιοι οι χαρακτήρες μπορούν να διαφέρουν από χώρα σε χώρα ή / και από χαρακτήρα σε σύνολο χαρακτήρων. Για παράδειγμα, η έννοια του αλφαβητικού χαρακτήρα διαφέρει στις ΗΠΑ και στη Γαλλία.

Μια κλάση χαρακτήρων ισχύει μόνο σε μια κανονική έκφραση μέσα στις αγκύλες μιας λίστας χαρακτήρων. Οι κλάσεις χαρακτήρων αποτελούνται από [: , μια λέξη-κλειδί που δηλώνει την τάξη και :] . Οι κλάσεις χαρακτήρων που ορίζονται από το πρότυπο POSIX είναι:

[: alnum:]

Αλφαριθμητικοί χαρακτήρες.

[:άλφα:]

Αλφαβητικοί χαρακτήρες.

[:κενό:]

Χαρακτήρες χώρου ή καρτέλας.

[: cntrl:]

Ελέγξτε τους χαρακτήρες.

[:ψηφίο:]

Αριθμητικοί χαρακτήρες.

[:γραφική παράσταση:]

Χαρακτήρες που είναι ταυτόχρονα εκτυπώσιμοι και ορατοί. (Ένας χώρος είναι εκτυπώσιμος, αλλά δεν είναι ορατός, ενώ ένα a είναι και τα δύο.)

[:πιο χαμηλα:]

Χαμηλός αλφαβητικός χαρακτήρας.

[:Τυπώνω:]

Εκτυπώσιμοι χαρακτήρες (χαρακτήρες που δεν είναι χαρακτήρες ελέγχου.)

[: σημείο:]

Χαρακτήρες στίξης (χαρακτήρες που δεν είναι γράμματα, ψηφία, χαρακτήρες ελέγχου ή χαρακτήρες διαστήματος).

[:χώρος:]

Διαστημικοί χαρακτήρες (όπως ο χώρος, η καρτέλα και η φόρμουλα, για να αναφέρουμε μερικά).

[:ανώτερος:]

Αλφαβητικοί χαρακτήρες ανώτερης περίπτωσης.

[: xdigit:]

Χαρακτήρες που είναι δεκαεξαδικά ψηφία.

Για παράδειγμα, πριν από το πρότυπο POSIX, για να ταιριάξετε αλφαριθμητικούς χαρακτήρες, θα χρειαστεί να γράψετε / [A-Za-z0-9] / . Εάν το σύνολο χαρακτήρων σας είχε άλλους αλφαβητικούς χαρακτήρες σε αυτό, αυτό δεν θα ταιριάζει με αυτά και εάν το σετ χαρακτήρων σας είναι διαφορετικό από το ASCII, αυτό ίσως δεν ταιριάζει με τους αλφαριθμητικούς χαρακτήρες ASCII. Με τις κλάσεις χαρακτήρων POSIX, μπορείτε να γράψετε / [[: alnum:]] / , και αυτό αντιστοιχεί στους αλφαβητικούς και αριθμητικούς χαρακτήρες στο σύνολο χαρακτήρων σας.

Δύο πρόσθετες ειδικές ακολουθίες μπορούν να εμφανιστούν στις λίστες χαρακτήρων. Αυτά ισχύουν για μη-ASCII σύνολα χαρακτήρων, τα οποία μπορούν να έχουν ενιαία σύμβολα (που ονομάζονται στοιχεία σύγκλισης ) που αντιπροσωπεύονται με περισσότερους από έναν χαρακτήρες, καθώς και αρκετούς χαρακτήρες που είναι ισοδύναμοι για σκοπούς σύγκλισης ή διαλογής. (Παραδείγματος χάριν, στα γαλλικά, μια πεδιάδα `` e '' και ένα σοβαρότατο e` είναι ισοδύναμα.)

Συγκέντρωση συμβόλων

Ένα σύμβολο σύγκλισης είναι ένα στοιχείο πολλαπλών χαρακτήρων που περικλείεται στο [. και .] . Για παράδειγμα, αν το ch είναι στοιχείο σύγκλισης, τότε [[.ch.]] Είναι μια κανονική έκφραση που ταιριάζει με αυτό το στοιχείο σύγκλισης, ενώ το [ch] είναι μια κανονική έκφραση που ταιριάζει είτε με το c είτε με το h .

Κλάσεις Ισοδυναμίας

Μια κλάση ισοδυναμίας είναι ένα συγκεκριμένο τοπικό όνομα για μια λίστα χαρακτήρων που είναι ισοδύναμες. Το όνομα περικλείεται σε [= και =] . Για παράδειγμα, το όνομα e μπορεί να χρησιμοποιηθεί για να αντιπροσωπεύει όλα τα `` e, '' `e ',' 'και` `e'. '' Στην περίπτωση αυτή, [[= e = αντιστοιχεί σε οποιοδήποτε από τα e , e ' , ή e` .

Αυτά τα χαρακτηριστικά είναι πολύ πολύτιμα σε μη αγγλόφωνες τοποθεσίες. Οι λειτουργίες βιβλιοθήκης που χρησιμοποιεί το gawk για αντιστοίχιση κανονικής έκφρασης αναγνωρίζουν αυτήν τη στιγμή μόνο κλάσεις χαρακτήρων POSIX. δεν αναγνωρίζουν τα σύμβολα ταξινόμησης ή τις κλάσεις ισοδυναμίας.

Οι χειριστές \ y , \ B , \ < , \> , \ w , \ W , \ ' και \' είναι συγκεκριμένοι για το gawk . είναι επεκτάσεις που βασίζονται σε εγκαταστάσεις στις βιβλιοθήκες κανονικής έκφρασης του GNU.

Οι διάφορες επιλογές γραμμής εντολών ελέγχουν τον τρόπο με τον οποίο ο gawk ερμηνεύει τους χαρακτήρες σε κανονικές εκφράσεις.

Δεν υπάρχουν επιλογές

Στην προεπιλεγμένη περίπτωση, το gawk παρέχει όλες τις δυνατότητες των κανονικών εκφράσεων POSIX και τους χειριστές κανονικής έκφρασης του GNU που περιγράφονται παραπάνω. Ωστόσο, δεν υποστηρίζονται εκφράσεις διαστήματος.

--posix

Υποστηρίζονται μόνο οι κανονικές εκφράσεις POSIX, οι χειριστές GNU δεν είναι ειδικοί. (Π.χ., \ w ταιριάζει με ένα literal w ). Επιτρέπονται χρονικές εκφράσεις.

--παραδοσιακός

Οι παραδοσιακές κανονικές εκφράσεις Unix awk ταιριάζουν. Οι χειριστές GNU δεν είναι ειδικοί, οι εκφράσεις διαστήματος δεν είναι διαθέσιμες και ούτε οι τάξεις χαρακτήρων POSIX ( [[: alnum:]] και ούτω καθεξής. Οι χαρακτήρες που περιγράφονται από τις οκταετίες και τις δεκαεξαδικές ακολουθίες διαφυγής αντιμετωπίζονται κυριολεκτικά, ακόμα και αν αντιπροσωπεύουν μεταχαρακάρες κανονικής έκφρασης.

- διάστημα

Να επιτρέπονται εκφράσεις διαστημάτων σε κανονικές εκφράσεις, ακόμη και αν έχει παρασχεθεί - παράδοση .

Ενέργειες

Οι δηλώσεις δράσης συνοδεύονται από τιράντες, { και } . Οι δηλώσεις δράσης αποτελούνται από τις συνήθεις εντολές εκχώρησης, υπό όρους και βρόχους που βρίσκονται στις περισσότερες γλώσσες. Οι χειριστές, οι δηλώσεις ελέγχου και οι διαθέσιμες δηλώσεις εισόδου / εξόδου είναι μορφοποιημένες μετά από εκείνες του C.

Χειριστές

Οι φορείς εκμετάλλευσης της AWK, κατά φθίνουσα προτεραιότητα, είναι

( ... )

Ομαδοποίηση

$

Αναφορά πεδίου.

++ -

Αύξηση και μείωση, και το πρόθεμα και το postfix.

^

Exponentiation ( ** μπορεί επίσης να χρησιμοποιηθεί, και ** = για τον τελεστή εκχώρησης).

+ -!

Unary plus, unary μείον και λογική άρνηση.

* /%

Πολλαπλασιασμός, διαίρεση και συντελεστής.

+ -

Πρόσθεση και αφαίρεση.

χώρος

Συνδυασμός συμβολοσειρών.

<>

<=> =

! = == Οι κανονικοί σχεσιακοί χειριστές.

~! ~

Τακτική αντιστοίχισης έκφρασης, άρνηση αντιστοίχισης. ΣΗΜΕΙΩΣΗ: Μην χρησιμοποιείτε μια σταθερή κανονική έκφραση ( / foo / ) στην αριστερή πλευρά ενός ~ ή ! ~ . Χρησιμοποιήστε μόνο μία στη δεξιά πλευρά. Η έκφραση / foo / ~ exp έχει την ίδια έννοια με (($ 0 ~ / foo /) ~ exp ) . Αυτό συνήθως δεν είναι αυτό που προοριζόταν.

σε

Συμμετοχή σε πίνακα.

&&

Λογική AND.

||

Λογική OR.

?:

Η υπό όρους έκφραση C. Αυτό έχει τη μορφή expr1 ; expr2 : expr3 . Αν το expr1 είναι αληθές, η τιμή της έκφρασης είναι expr2 , διαφορετικά είναι expr3 . Μόνο ένα από τα expr2 και expr3 αξιολογείται.

= + = - =

* = / =% = ^ = Αντιστοίχιση. Τόσο η απόλυτη αντιστοίχιση ( var = value ) όσο και η ανάθεση του χειριστή (οι άλλες μορφές) υποστηρίζονται.

Δηλώσεις Ελέγχου

Οι δηλώσεις ελέγχου έχουν ως εξής:

εάν ( condition ) δήλωση [ αλλιώς δήλωση ] ενώ ( condition ) δήλωση κάνει δήλωση ενώ ( condition ) για ( expr1 ; expr2 ; expr3 ) δηλώσεις }

Δηλώσεις εισόδου / εξόδου

Οι καταστάσεις εισόδου / εξόδου έχουν ως εξής:

κλείσιμο ( αρχείο [ , πώς ] )

Κλείστε αρχείο, σωλήνα ή συν-επεξεργασία. Ο προαιρετικός τρόπος με τον οποίο θα πρέπει να χρησιμοποιείται μόνο όταν κλείνετε ένα άκρο ενός σωλήνα διπλής κατεύθυνσης σε μια συνδιαδικασία. Πρέπει να είναι μια τιμή συμβολοσειράς, είτε "προς" είτε "από" .

getline

Ορίστε $ 0 από την επόμενη εγγραφή εισόδου. ορίστε NF , NR , FNR .

getline < αρχείο

Ορίστε $ 0 από την επόμενη εγγραφή του αρχείου . ορίστε το NF .

getline var

Ορίστε var από την επόμενη εγγραφή εισόδου. set NR , FNR .

getline var < αρχείο

Ορίστε var από την επόμενη εγγραφή του αρχείου .

εντολή | getline [ var ]

Εκτελέστε την εντολή για την έξοδο είτε σε $ 0 είτε στο var , όπως παραπάνω.

εντολή & getline [ var ]

Εκτελέστε την εντολή ως συνδιαδικασία για την παραγωγή της εξόδου είτε σε $ 0 είτε στο var , όπως παραπάνω. Οι συνεργασίες είναι μια επέκταση.

Επόμενο

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

επόμενο αρχείο

Διακοπή επεξεργασίας του τρέχοντος αρχείου εισόδου. Η επόμενη εγγραφή εγγραφής εισόδου προέρχεται από το επόμενο αρχείο εισόδου. Το FILENAME και το ARGIND ενημερώνονται, το FNR επαναφέρεται στο 1 και η επεξεργασία ξεκινάει με το πρώτο μοτίβο στο πρόγραμμα AWK. Εάν επιτευχθεί το τέλος των δεδομένων εισόδου, εκτελούνται τα μπλοκ END , εάν υπάρχουν.

Τυπώνω

Εκτυπώνει την τρέχουσα εγγραφή. Η εγγραφή εξόδου τερματίζεται με την τιμή της μεταβλητής ORS .

εκτύπωση εκτύπωσης

Εκτυπώνει εκφράσεις. Κάθε έκφραση χωρίζεται από την τιμή της μεταβλητής OFS . Η εγγραφή εξόδου τερματίζεται με την τιμή της μεταβλητής ORS .

print expr-list > αρχείο

Εκτυπώνει εκφράσεις στο αρχείο . Κάθε έκφραση χωρίζεται από την τιμή της μεταβλητής OFS . Η εγγραφή εξόδου τερματίζεται με την τιμή της μεταβλητής ORS .

printf fmt, expr-λίστα

Μορφοποίηση και εκτύπωση.

printf fmt, expr-list > αρχείο

Μορφοποίηση και εκτύπωση σε αρχείο .

συστήματος ( cmd-γραμμή )

Εκτελέστε την εντολή cmd-line και επιστρέψτε την κατάσταση εξόδου. (Αυτό ενδέχεται να μην είναι διαθέσιμο σε συστήματα μη POSIX.)

fflush ( [ αρχείο ] )

Ξεπλύνετε τυχόν buffer που σχετίζεται με το ανοιχτό αρχείο εξόδου ή το αρχείο σωλήνων. Εάν λείπει αρχείο , τότε η τυπική έξοδος ξεπλένεται. Αν το αρχείο είναι η μηδενική συμβολοσειρά, τότε όλα τα ανοιχτά αρχεία εξόδου και οι αγωγοί έχουν ξεπλύνετε τα buffer τους.

Επιτρέπονται πρόσθετες ανακατευθύνσεις εξόδου για εκτύπωση και printf .

εκτυπώστε ... >> αρχείο

προσθέτει την έξοδο στο αρχείο .

εκτύπωση ... | εντολή

γράφει σε ένα σωλήνα.

εκτύπωση ... & εντολή

αποστέλλει δεδομένα σε μια συνδιαδικασία.

Η εντολή getline επιστρέφει 0 στο τέλος του αρχείου και -1 για ένα σφάλμα. Σε ένα σφάλμα, το ERRNO περιέχει μια συμβολοσειρά που περιγράφει το πρόβλημα.

ΣΗΜΕΙΩΣΗ: Εάν χρησιμοποιείτε έναν αγωγό ή μια συνδιαδικασία για την εκκίνηση , ή από εκτύπωση ή printf μέσα σε ένα βρόχο, πρέπει να χρησιμοποιήσετε το close () για να δημιουργήσετε νέες εμφανίσεις της εντολής. Το AWK δεν κλείνει αυτόματα σωλήνες ή συν-διαδικασίες όταν επιστρέφουν EOF.

Η δήλωση printf

Οι εκδόσεις AWK της εντολής printf και της λειτουργίας sprintf () (δείτε παρακάτω) αποδέχονται τις ακόλουθες μορφές προδιαγραφών μετατροπής:

%ντο

Ένας χαρακτήρας ASCII. Αν το όρισμα που χρησιμοποιείται για το % c είναι αριθμητικό, αντιμετωπίζεται ως χαρακτήρας και εκτυπώνεται. Διαφορετικά, το όρισμα θεωρείται ότι είναι μια συμβολοσειρά και εκτυπώνεται ο μόνος πρώτος χαρακτήρας αυτής της συμβολοσειράς.

% d , % i

Δεκαδικό αριθμό (το ακέραιο τμήμα).

% e,% E

Ένας αριθμός κινητής υποδιαστολής της φόρμας [-] d.dddddde [+ -] dd . Η μορφή % E χρησιμοποιεί E αντί για e .

%φά

Ένας αριθμός κινητής υποδιαστολής της φόρμας [-] ddd.dddddd .

% g,% G

Χρησιμοποιήστε % e ή % f μετατροπή, όποιο είναι μικρότερο, με καταργημένα μηδενικά μηδενικά. Η μορφή % G χρησιμοποιεί % E αντί % e .

% o

Ένας μη οκταδικός αριθμός (επίσης ένας ακέραιος αριθμός).

% u Ένα μη υπογεγραμμένο δεκαδικό αριθμό (και πάλι ένας ακέραιος αριθμός).

%μικρό

Μια συμβολοσειρά χαρακτήρων.

% x,% X

Ένας μη υπογεγραμμένος δεκαεξαδικός αριθμός (ένας ακέραιος αριθμός). Η μορφή % X χρησιμοποιεί ABCDEF αντί για abcdef .

%%

Ένας μοναδικός χαρακτήρας % . κανένα όρισμα δεν μετατρέπεται.

Προαιρετικά, ενδέχεται να υπάρχουν πρόσθετες παράμετροι μεταξύ του % και του γράμματος ελέγχου:

μετρήστε $

Χρησιμοποιήστε το όρισμα " count " σε αυτό το σημείο στη μορφοποίηση. Αυτό ονομάζεται προσδιοριστής θέσης και προορίζεται κυρίως για χρήση σε μεταφρασμένες εκδόσεις των συμβολοσειρών μορφοποίησης, όχι στο αρχικό κείμενο ενός προγράμματος AWK. Πρόκειται για μια επέκταση.

-

Η έκφραση θα πρέπει να δικαιολογείται αριστερά στο πεδίο της.

χώρος

Για αριθμητικές μετατροπές, θετικές τιμές προθέματος με κενό και αρνητικές τιμές με σημάδι μείον.

+

Το σύμβολο συν, που χρησιμοποιείται πριν από τον τροποποιητή πλάτους (βλ. Παρακάτω), αναφέρει ότι πάντα παρέχει μια πινακίδα για αριθμητικές μετατροπές, ακόμα και αν τα δεδομένα που θα μορφοποιηθούν είναι θετικά. Το + υπερισχύει του τροποποιητή χώρου.

# #

Χρησιμοποιήστε μια εναλλακτική φόρμα για ορισμένα γράμματα ελέγχου. Για % o , προμηθεύστε το μηδέν. Για τα % x και % X , παρέχετε μια κορυφαία τιμή 0x ή 0X για μη ευανάγνωστο αποτέλεσμα. Για τα % e , % E και % f , το αποτέλεσμα περιέχει πάντα ένα δεκαδικό. Για τα % g και % G , τα μηδενικά που ακολουθούν δεν αφαιρούνται από το αποτέλεσμα.

0

Ένα ηγετικό 0 (μηδέν) ενεργεί ως σημαία, που δείχνει ότι η έξοδος πρέπει να είναι γεμισμένη με μηδενικά αντί για κενά. Αυτό ισχύει ακόμη και σε μη αριθμητικές μορφές εξόδου. Αυτή η σημαία έχει μόνο αποτέλεσμα όταν το πλάτος πεδίου είναι ευρύτερο από την τιμή που πρόκειται να εκτυπωθεί.

πλάτος

Το πεδίο πρέπει να είναι γεμισμένο σε αυτό το πλάτος. Το πεδίο είναι κανονικά γεμισμένο με κενά. Εάν έχει χρησιμοποιηθεί η σημαία 0 , είναι γεμισμένη με μηδενικά.

. προ

Ένας αριθμός που καθορίζει την ακρίβεια που πρέπει να χρησιμοποιείται κατά την εκτύπωση. Για τις μορφές % e , % E και % f , αυτό καθορίζει τον αριθμό των ψηφίων που θέλετε να εκτυπωθούν στα δεξιά της υποδιαστολής. Για τις μορφές % g και % G , καθορίζει το μέγιστο αριθμό σημαντικών ψηφίων. Για τις μορφές % d , % o , % i , % u , % x και % X , καθορίζει τον ελάχιστο αριθμό ψηφίων προς εκτύπωση. Για το % s , καθορίζει τον μέγιστο αριθμό χαρακτήρων από τη συμβολοσειρά που πρέπει να εκτυπωθεί.

Το δυναμικό πλάτος και οι προκριματικές δυνατότητες των ρουτινών ANSI C printf () υποστηρίζονται. Το A * αντί του προδιαγραφικού πλάτους ή των προδιαγραφών προκαλεί την ανάληψη των τιμών τους από τη λίστα των παραδειγμάτων σε printf ή sprintf () . Για να χρησιμοποιήσετε έναν προσδιοριστή θέσης με δυναμικό πλάτος ή ακρίβεια, προμηθεύστε τον αριθμό $ μετά το * στη συμβολοσειρά μορφής. Για παράδειγμα, "% 3 $ * 2 $. * 1 $ s" .

Ειδικά ονόματα αρχείων

Όταν πραγματοποιείτε ανακατεύθυνση εισόδου / εξόδου από εκτύπωση ή printf σε αρχείο ή μέσω γραμμής εντολών από ένα αρχείο, το gawk αναγνωρίζει ορισμένα ειδικά ονόματα αρχείων εσωτερικά. Αυτά τα ονόματα αρχείων επιτρέπουν την πρόσβαση σε ανοικτούς περιγραφείς αρχείων που κληρονόμησε από τη γονική διαδικασία του gawk (συνήθως το κέλυφος). Αυτά τα ονόματα αρχείων μπορούν επίσης να χρησιμοποιηθούν στη γραμμή εντολών για να ονομάσουν αρχεία δεδομένων. Τα ονόματα αρχείων είναι:

/ dev / stdin

Η τυπική είσοδος.

/ dev / stdout

Η τυπική έξοδος.

/ dev / stderr

Η τυπική έξοδος σφάλματος.

/ dev / fd / n

Το αρχείο που σχετίζεται με τον ανοικτό περιγραφέα αρχείων n .

Αυτά είναι ιδιαίτερα χρήσιμα για μηνύματα σφάλματος. Για παράδειγμα:

εκτυπώστε "Έσπασε!" > "/ dev / stderr"

ενώ διαφορετικά θα έπρεπε να χρησιμοποιήσετε

εκτυπώστε "Έσπασε!" | "γάτα 1> & 2"

Τα ακόλουθα ειδικά ονόματα αρχείων μπορούν να χρησιμοποιηθούν με τον χειριστή | & co-process για τη δημιουργία συνδέσεων δικτύου TCP / IP.

/ inet / tcp / lport / rhost / rport

Αρχείο για σύνδεση TCP / IP σε τοπική θύρα lport σε απομακρυσμένο host rhost σε απομακρυσμένη θύρα rport . Χρησιμοποιήστε μια θύρα 0 για να επιλέξετε το σύστημα μια θύρα.

/ inet / udp / lport / rhost / rport

Παρόμοια, αλλά χρησιμοποιούν UDP / IP αντί για TCP / IP.

/ inet / raw / lport / rhost / rport

Προορίζεται για μελλοντική χρήση.

Άλλα ειδικά ονόματα αρχείων παρέχουν πρόσβαση σε πληροφορίες σχετικά με την τρέχουσα διαδικασία. Αυτά τα ονόματα αρχείων είναι πλέον παρωχημένα. Χρησιμοποιήστε τη συστοιχία PROCINFO για να λάβετε τις πληροφορίες που παρέχουν. Τα ονόματα αρχείων είναι:

/ dev / pid

Η ανάγνωση αυτού του αρχείου επιστρέφει το αναγνωριστικό διαδικασίας της τρέχουσας διαδικασίας, σε δεκαδικό, που τερματίζεται με μια νέα γραμμή.

/ dev / ppid

Ανάγνωση αυτού του αρχείου επιστρέφει το αναγνωριστικό γονικής διαδικασίας της τρέχουσας διαδικασίας, σε δεκαδικό, που τερματίζεται με μια νέα γραμμή.

/ dev / pgrpid

Ανάγνωση αυτού του αρχείου επιστρέφει το αναγνωριστικό ομάδας της διαδικασίας της τρέχουσας διαδικασίας, σε δεκαδικό, που τερματίζεται με μια νέα γραμμή.

/ dev / χρήστης

Η ανάγνωση αυτού του αρχείου επιστρέφει μια μόνο εγγραφή που τερματίζεται με μια νέα γραμμή. Τα πεδία χωρίζονται με κενά. Το $ 1 είναι η τιμή της κλήσης συστήματος getuid (2), το $ 2 είναι η τιμή της κλήσης συστήματος geteuid (2), το $ 3 είναι η τιμή της κλήσης συστήματος getgid (2) και το $ 4 είναι η αξία του getegid (2) κλήση συστήματος. Αν υπάρχουν επιπλέον πεδία, είναι τα αναγνωριστικά ομάδας που επέστρεψαν οι getgroups (2). Πολλές ομάδες ενδέχεται να μην υποστηρίζονται σε όλα τα συστήματα.

Αριθμητικές λειτουργίες

Το AWK έχει τις ακόλουθες αριθμητικές λειτουργίες:

atan2 ( γ , χ )

Επιστρέφει το ορθογώνιο του y / x σε ακτίνια.

cos ( expr )

Επιστρέφει το συνημίτονο του expr , το οποίο είναι σε ακτίνια.

exp ( expr )

Η εκθετική λειτουργία.

int ( expr )

Αναστέλλει τον ακέραιο.

log ( expr )

Η συνάρτηση φυσικού λογαρίθμου.

άκρα()

Επιστρέφει έναν τυχαίο αριθμό μεταξύ 0 και 1.

αμαρτία ( expr )

Επιστρέφει το ημίτονο του expr , το οποίο είναι σε ακτίνια.

sqrt ( expr )

Η λειτουργία τετραγωνικής ρίζας.

srand ( [ expr ] )

Χρησιμοποιεί το expr ως νέο σπόρο για τη γεννήτρια τυχαίων αριθμών. Εάν δεν παρέχεται η ένδειξη, χρησιμοποιείται η ώρα της ημέρας. Η τιμή επιστροφής είναι ο προηγούμενος σπόρος για τη γεννήτρια τυχαίων αριθμών.

Λειτουργίες στοιχειοσειράς

Το Gawk έχει τις ακόλουθες ενσωματωμένες λειτουργίες στοιχειοσειράς:

asort ( s [ , d ] )

Επιστρέφει τον αριθμό των στοιχείων στη συστοιχία προέλευσης s . Τα περιεχόμενα του s ταξινομούνται με τους συνήθεις κανόνες του gawk για τη σύγκριση των τιμών και τα ευρετήρια των ταξινομημένων τιμών του s αντικαθίστανται από διαδοχικούς ακέραιους που ξεκινούν από το 1. Εάν ο προαιρετικός πίνακας προορισμού d είναι προσδιορισμένος τότε το s αρχικά αντιγράφεται σε d , και κατόπιν ταξινομείται το 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 , αντικαταστήστε το string s και επιστρέψτε τον αριθμό των αντικαταστάσεων. Εάν t δεν παρέχεται, χρησιμοποιήστε $ 0 . Ένα & στο κείμενο αντικατάστασης αντικαθίσταται με το κείμενο που πραγματικά αντιστοιχούσε. Χρησιμοποιήστε το \ & για να πάρετε μια λέξη & . (Αυτό πρέπει να πληκτρολογηθεί ως "\\\" · δείτε το GAWK: Αποτελεσματικός Προγραμματισμός AWK για πληρέστερη συζήτηση των κανόνων για & & και backslash στο κείμενο αντικατάστασης των sub () , gsub () και gensub ( )

δείκτης ( s , t )

Επιστρέφει τον δείκτη της συμβολοσειράς t στη συμβολοσειρά s ή το 0 αν το t δεν υπάρχει. (Αυτό σημαίνει ότι οι δείκτες χαρακτήρων ξεκινούν από έναν.)

μήκος ( [ s ] )

Επιστρέφει το μήκος της συμβολοσειράς s ή το μήκος των $ 0 αν δεν παρέχεται το s .

αντιστοιχία ( s , r [ , a ] )

Επιστρέφει τη θέση σε s όπου εμφανίζεται η κανονική έκφραση r ή 0 αν το r δεν υπάρχει και ορίζει τις τιμές των RSTART και RLENGTH . Σημειώστε ότι η σειρά παραγγελιών είναι ίδια με την εντολή ~ operator: str . Αν η διάταξη a παρέχεται, το a εκκαθαρίζεται και στη συνέχεια τα στοιχεία 1 έως n γεμίζουν με τα τμήματα του s που ταιριάζουν με την αντίστοιχη παρενθετική παράφραση στο r . Το στοιχείο 0 του α περιέχει το τμήμα του s που ταιριάζει με ολόκληρη την κανονική έκφραση r .

διάσπαση ( s , a [ , r ] )

Διαχωρίζει τη συμβολοσειρά s στη διάταξη a στην κανονική έκφραση r και επιστρέφει τον αριθμό των πεδίων. Εάν το r παραλείπεται, χρησιμοποιείται το FS . Ο πίνακας a καθαρίζεται πρώτα. Η διάσπαση συμπεριφέρεται με τον ίδιο τρόπο με τον χωρισμό του πεδίου, όπως περιγράφεται παραπάνω.

sprintf ( fmt , expr-list )

Εκτυπώνει expr-list σύμφωνα με το fmt και επιστρέφει την προκύπτουσα συμβολοσειρά.

strtonum ( str )

Εξετάζει την str και επιστρέφει την αριθμητική τιμή της. Αν η str ξεκινάει με μια κορυφή 0 , το strtonum () υποθέτει ότι το str είναι ένας οκταδικός αριθμός. Αν το str ξεκινάει με ένα κορυφαίο 0x ή 0X , το strtonum () υποθέτει ότι το str είναι ένας δεκαεξαδικός αριθμός.

sub ( r , s [ , t ] )

Ακριβώς όπως το gsub () , αλλά αντικαθίσταται μόνο η πρώτη υποζώνη αντιστοίχισης.

υποστ ( s , i [ , n ] )

Επιστρέφει το n -character substring του n που αρχίζει στο i . Αν το n παραλειφθεί, χρησιμοποιείται το υπόλοιπο s .

tolower ( str )

Επιστρέφει ένα αντίγραφο της συμβολοσειράς str , με όλους τους χαρακτήρες των κεφαλαίων στο str να μεταφράζονται στα αντίστοιχα μικρά τους αντίστοιχα. Οι μη αλφαβητικοί χαρακτήρες παραμένουν αμετάβλητοι.

toupper ( str )

Επιστρέφει ένα αντίγραφο της str string, με όλους τους μικρούς χαρακτήρες στο str να μεταφράζονται στα αντίστοιχα μεγάλα αντίγραφα τους. Οι μη αλφαβητικοί χαρακτήρες παραμένουν αμετάβλητοι.

Λειτουργίες χρόνου

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

mktime ( datespec )

Rurns datespec σε μια χρονική σφραγίδα της ίδιας φόρμας που επέστρεψε από το systime () . Το datepec είναι μια συμβολοσειρά της φόρμας YYYY MM DD HH MM SS [DST] . Το περιεχόμενο της συμβολοσειράς είναι έξι ή επτά αριθμοί που αντιπροσωπεύουν αντίστοιχα ολόκληρο το έτος συμπεριλαμβανομένου του αιώνα, του μήνα από το 1 έως το 12, την ημέρα του μήνα από το 1 έως το 31, την ώρα της ημέρας από το 0 έως το 23, το λεπτό από το 0 έως το 59 και το δεύτερο από 0 έως 60 και μια προαιρετική σημαία θερινής ώρας. Οι τιμές αυτών των αριθμών δεν χρειάζεται να βρίσκονται εντός των καθορισμένων τιμών. για παράδειγμα, μία ώρα -1 σημαίνει 1 ώρα πριν από τα μεσάνυχτα. Το μητρώο προέλευσης μηδενικού Γρηγοριανού υποτίθεται, με το έτος 0 πριν από το έτος 1 και το έτος -1 πριν από το έτος 0. Ο χρόνος υποτίθεται ότι βρίσκεται στην τοπική ζώνη ώρας. Εάν η σημαία θερινής ώρας είναι θετική, ο χρόνος θεωρείται θερινή ώρα. εάν είναι μηδέν, ο χρόνος θεωρείται κανονικός χρόνος. και αν είναι αρνητική (η προεπιλογή), το mktime () προσπαθεί να καθορίσει εάν ο θερινός χρόνος ισχύει για την καθορισμένη ώρα. Εάν το datespec δεν περιέχει αρκετά στοιχεία ή αν ο προκύπτων χρόνος είναι εκτός εύρους, mktime () επιστρέφει -1.

strftime ( [ format [ , timestamp ]] )

Σχηματίζει χρονική σήμανση σύμφωνα με τις προδιαγραφές σε μορφή. Η χρονική σήμανση πρέπει να έχει την ίδια μορφή με την επιστροφή από το systime () . Εάν λείπει το timestamp , χρησιμοποιείται η τρέχουσα ώρα της ημέρας. Εάν λείπει η μορφή , χρησιμοποιείται προκαθορισμένη μορφή ισοδύναμη με την έξοδο της ημερομηνίας (1). Δείτε τις προδιαγραφές για τη λειτουργία strftime () στο ANSI C για τις μετατροπές μορφής που είναι εγγυημένες ότι είναι διαθέσιμες. Μια έκδοση δημόσιου τομέα του strftime (3) και μια σελίδα man για αυτό έρχονται με gawk ? εάν αυτή η έκδοση χρησιμοποιήθηκε για την κατασκευή του gawk , τότε όλες οι μετατροπές που περιγράφονται σε αυτή τη σελίδα man είναι διαθέσιμες στο gawk.

systime ()

Επιστρέφει την τρέχουσα ώρα της ημέρας ως τον αριθμό δευτερολέπτων από την Εποχή (1970-01-01 00:00:00 UTC σε συστήματα POSIX).

Λειτουργίες επεξεργασίας δυαδικών ψηφίων

Ξεκινώντας με την έκδοση 3.1 του gawk , είναι διαθέσιμες οι ακόλουθες λειτουργίες χειρισμού bit. Λειτουργούν με τη μετατροπή των τιμών μεταβλητού σημείου διπλής ακρίβειας σε μη υπογεγραμμένους μακρούς ακέραιους αριθμούς, πραγματοποιώντας τη λειτουργία και στη συνέχεια μετατρέποντας το αποτέλεσμα σε πλωτό σημείο. Οι λειτουργίες είναι:

και ( v1 , v2 )

Επιστρέψτε το bitwise των τιμών των v1 και v2 .

compl ( val )

Επιστρέψτε το bitwise συμπλήρωμα του val .

lshift ( val , count )

Επιστρέψτε την τιμή του val , μετατοπισμένη αριστερά από τα bits μέτρησης .

ή ( ν1 , ν2 )

Επιστρέψτε το bitwise OR από τις τιμές που παρέχονται από v1 και v2 .

rshift ( val , count )

Επιστρέψτε την τιμή του val , μετατοπισμένη δεξιά από τα bits μέτρησης .

xor ( v1 , v2 )

Επιστρέψτε το bitwise XOR των τιμών που παρέχονται από v1 και v2 .

Λειτουργίες διεθνοποίησης

Ξεκινώντας με την έκδοση 3.1 του gawk , οι παρακάτω λειτουργίες μπορούν να χρησιμοποιηθούν από το πρόγραμμα AWK για μεταφράσεις συμβολοσειρών κατά την εκτέλεση. Για περισσότερες λεπτομέρειες, ανατρέξτε στο GAWK: Αποτελεσματικός Προγραμματισμός AWK .

bindtextdomain ( κατάλογος [ , τομέας ] )

Καθορίζει τον κατάλογο όπου ο gawk αναζητά τα αρχεία .mo , σε περίπτωση που δεν μπορούν ή δεν μπορούν να τοποθετηθούν στις `` standard '' θέσεις (π.χ. κατά τη διάρκεια των δοκιμών). Επιστρέφει τον κατάλογο όπου ο τομέας είναι δεσμευμένος.

Ο προεπιλεγμένος τομέας είναι η τιμή του TEXTDOMAIN . Αν ο κατάλογος είναι η μηδενική συμβολοσειρά ( "" ), τότε το bindtextdomain () επιστρέφει την τρέχουσα δέσμευση για τον συγκεκριμένο τομέα .

dcgettext ( συμβολοσειρά [ , τομέα [ , κατηγορία ]] )

Επιστρέφει τη μετάφραση της συμβολοσειράς στον τομέα του τομέα κειμένου για την κατηγορία της κατηγορίας locale. Η προεπιλεγμένη τιμή για τον τομέα είναι η τρέχουσα τιμή του TEXTDOMAIN . Η προεπιλεγμένη τιμή για την κατηγορία είναι "LC_MESSAGES" .

Αν παρέχετε μια τιμή για την κατηγορία , πρέπει να είναι μια συμβολοσειρά ίση με μία από τις γνωστές κατηγορίες locale που περιγράφονται στο GAWK: Efficient Programming AWK . Πρέπει επίσης να παρέχετε έναν τομέα κειμένου. Χρησιμοποιήστε το TEXTDOMAIN αν θέλετε να χρησιμοποιήσετε τον τρέχοντα τομέα.

dcngettext ( συμβολοσειρά1 , συμβολοσειρά2 , αριθμός [ , τομέας [ , κατηγορία ]] )

Επιστρέφει τον πληθυντικό αριθμό που χρησιμοποιείται για τον αριθμό της μετάφρασης του string1 και string2 στον τομέα του τομέα κειμένου για την κατηγορία της κατηγορίας locale. Η προεπιλεγμένη τιμή για τον τομέα είναι η τρέχουσα τιμή του TEXTDOMAIN . Η προεπιλεγμένη τιμή για την κατηγορία είναι "LC_MESSAGES" .

Αν παρέχετε μια τιμή για την κατηγορία , πρέπει να είναι μια συμβολοσειρά ίση με μία από τις γνωστές κατηγορίες locale που περιγράφονται στο GAWK: Efficient Programming AWK . Πρέπει επίσης να παρέχετε έναν τομέα κειμένου. Χρησιμοποιήστε το TEXTDOMAIN αν θέλετε να χρησιμοποιήσετε τον τρέχοντα τομέα.

ΛΕΙΤΟΥΡΓΙΕΣ ΟΡΙΖΟΜΕΝΕΣ ΑΠΟ ΧΡΗΣΤΕΣ

Οι λειτουργίες στο AWK ορίζονται ως εξής:

όνομα λειτουργίας ( λίστα παραμέτρων ) { statements }

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

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

η συνάρτηση f (p, q, a, b) # a και b είναι τοπικές {...} / abc / {...; f (1,2). ...}

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

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

Χρησιμοποιήστε την επιστροφή expr για να επιστρέψετε μια τιμή από μια συνάρτηση. Η τιμή επιστροφής δεν είναι προσδιορισμένη αν δεν παρέχεται τιμή ή εάν η συνάρτηση επιστρέφει με το `` πέφτει '' στο τέλος.

Εάν παρέχεται το - lint , το gawk προειδοποιεί για κλήσεις σε απροσδιόριστες συναρτήσεις κατά την παράδοση, αντί για ώρα εκτέλεσης. Η κλήση μιας απροσδιόριστης συνάρτησης κατά το χρόνο εκτέλεσης είναι ένα θανατηφόρο σφάλμα.

Η λέξη func μπορεί να χρησιμοποιηθεί στη θέση της λειτουργίας .

ΔΥΝΑΜΙΚΑ ΦΟΡΤΩΣΗ ΝΕΩΝ ΛΕΙΤΟΥΡΓΙΩΝ

Ξεκινώντας με την έκδοση 3.1 του gawk , μπορείτε να προσθέσετε δυναμικά νέες ενσωματωμένες λειτουργίες στον τρέχοντα διερμηνέα gawk . Οι πλήρεις λεπτομέρειες είναι πέραν του πεδίου εφαρμογής αυτής της σελίδας εγχειριδίου. βλ. GAWK: Αποτελεσματικός προγραμματισμός AWK για λεπτομέρειες.

επέκταση ( αντικείμενο , λειτουργία )

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

Αυτή η λειτουργία παρέχεται και τεκμηριώνεται στο GAWK: Αποτελεσματικός Προγραμματισμός AWK , αλλά όλα σχετικά με αυτή τη δυνατότητα είναι πιθανό να αλλάξουν στην επόμενη έκδοση. Σας προτείνουμε ΣΥΓΚΡΟΤΗΜΑ να μην χρησιμοποιήσετε αυτή τη λειτουργία για οτιδήποτε δεν θέλετε να επαναλάβετε.

ΣΗΜΑΤΑ

Το pgawk δέχεται δύο σήματα. Το SIGUSR1 το αναγκάζει να εκφορτώσει μια στοίβα κλήσεων προφίλ και λειτουργίας στο αρχείο προφίλ, το οποίο είναι είτε awkprof.out είτε οιοδήποτε αρχείο ονομάστηκε με την επιλογή --profile . Τότε συνεχίζει να τρέχει. Το SIGHUP την αναγκάζει να ξεφορτωθεί τη στοίβα κλήσεων προφίλ και λειτουργίας και μετά να βγει.

ΠΑΡΑΔΕΙΓΜΑΤΑ

Εκτυπώστε και ταξινομήστε τα ονόματα σύνδεσης όλων των χρηστών: BEGIN {FS = ":"} {print $ 1 | "sort"} Καταμέτρηση γραμμών σε ένα αρχείο: {nlines ++} END {print nlines} Προηγείστε κάθε γραμμή με τον αριθμό του στο αρχείο: {print FNR, $ 0} Concatenate και αριθμός γραμμής (μια παραλλαγή σε ένα θέμα) $ 0}

Εσωτερικοποίηση

Οι σταθερές συμβολοσειρών είναι ακολουθίες χαρακτήρων που περικλείονται σε διπλά εισαγωγικά. Σε περιβάλλοντα που δεν μιλούν αγγλικά, είναι δυνατόν να επισημάνετε τις συμβολοσειρές στο πρόγραμμα AWK ως απαιτώντας μετάφραση στη φυσική γλώσσα. Αυτές οι συμβολοσειρές επισημαίνονται στο πρόγραμμα AWK με μια κορυφαία υπογράμμιση (`` _ ''). Για παράδειγμα,

gawk 'BEGIN {εκτύπωση "γεια σου, κόσμος"}'

πάντα εκτυπώνει γεια σου, κόσμος . Αλλά,

gawk 'BEGIN {print _ "γειά σου, κόσμος"}'

μπορεί να εκτυπώσει bonjour, monde στη Γαλλία.

Υπάρχουν διάφορα βήματα που σχετίζονται με την παραγωγή και τη λειτουργία ενός εντοπισμένου προγράμματος AWK.

1.

Προσθέστε μια ενέργεια BEGIN για να ορίσετε μια τιμή στη μεταβλητή TEXTDOMAIN για να ορίσετε τον τομέα κειμένου σε ένα όνομα που σχετίζεται με το πρόγραμμά σας.


BEGIN {TEXTDOMAIN = "myprog"}

Αυτό επιτρέπει στο gawk να βρει το αρχείο .mo που σχετίζεται με το πρόγραμμά σας. Χωρίς αυτό το βήμα, το gawk χρησιμοποιεί τον τομέα κειμένου μηνυμάτων , ο οποίος πιθανόν δεν περιέχει μεταφράσεις για το πρόγραμμά σας.

2.

Σημειώστε όλες τις συμβολοσειρές που πρέπει να μεταφράζονται με τις κύριες υπογραμμίσεις.

3.

Εάν είναι απαραίτητο, χρησιμοποιήστε τις λειτουργίες dcgettext () και / ή bindtextdomain () στο πρόγραμμα σας, κατά περίπτωση.

4.

Εκτελέστε gawk --gen-po -f myprog.awk> myprog.po για να δημιουργήσετε ένα αρχείο .po για το πρόγραμμά σας.

5.

Παρέχετε τις κατάλληλες μεταφράσεις και δημιουργήστε και εγκαταστήστε ένα αντίστοιχο αρχείο .mo .

Τα χαρακτηριστικά διεθνοποίησης περιγράφονται λεπτομερώς στο GAWK: Αποτελεσματικός Προγραμματισμός AWK .

Posix Συμβατότητα

Ένας πρωταρχικός στόχος για το gawk είναι η συμβατότητα με το πρότυπο POSIX, καθώς και με την τελευταία έκδοση του UNIX awk . Για το σκοπό αυτό, το gawk ενσωματώνει τις ακόλουθες ορατές λειτουργίες του χρήστη, οι οποίες δεν περιγράφονται στο βιβλίο AWK, αλλά αποτελούν μέρος της έκδοσης Bell του εργαστηρίου awk και βρίσκονται στο πρότυπο POSIX.

Το βιβλίο υποδεικνύει ότι η εκχώρηση μεταβλητής γραμμής εντολών συμβαίνει όταν το awk διαφορετικά θα ανοίξει το όρισμα ως αρχείο, το οποίο είναι μετά την εκτέλεση του μπλοκ BEGIN . Ωστόσο, σε προηγούμενες εφαρμογές, όταν εμφανίστηκε μια τέτοια αντιστοίχιση πριν από οποιαδήποτε ονόματα αρχείων, η ανάθεση θα συνέβαινε πριν από την εκτέλεση του μπλοκ BEGIN . Οι εφαρμογές εξαρτώνται από αυτό το χαρακτηριστικό. Όταν τροποποιήθηκε το awk ώστε να ταιριάζει με την τεκμηρίωσή του, η επιλογή -v για την αντιστοίχιση μεταβλητών πριν την εκτέλεση του προγράμματος προστέθηκε για να φιλοξενήσει εφαρμογές που εξαρτώνται από την παλιά συμπεριφορά. (Αυτό το χαρακτηριστικό συμφωνήθηκε τόσο από τους Bell Laboratories όσο και από τους προγραμματιστές της GNU.)

Η επιλογή -W για συγκεκριμένα χαρακτηριστικά εφαρμογής είναι από το πρότυπο POSIX.

Όταν επεξεργάζεστε τα επιχειρήματα, το gawk χρησιμοποιεί την ειδική επιλογή `` - '' για να σηματοδοτήσει το τέλος των παραδειγμάτων. Σε κατάσταση λειτουργίας συμβατότητας, προειδοποιεί αλλά αλλιώς αγνοεί απροσδιόριστες επιλογές. Κατά την κανονική λειτουργία, τέτοια επιχειρήματα μεταβιβάζονται στο πρόγραμμα AWK για να υποστούν επεξεργασία.

Το βιβλίο AWK δεν καθορίζει την αξία επιστροφής του srand () . Το πρότυπο POSIX επιστρέφει το σπόρο που χρησιμοποίησε για να επιτρέπει την παρακολούθηση των ακολουθιών τυχαίων αριθμών. Επομένως, το srand () στο gawk επιστρέφει επίσης τον τρέχοντα σπόρο του.

Άλλα νέα χαρακτηριστικά είναι: Η χρήση πολλαπλών επιλογών -f (από το MKS awk ). τη συστοιχία ENVIRON . οι αλληλουχίες \ a , και \ v διαφυγής (που έγιναν αρχικά στο Gawk και τροφοδοτήθηκαν πίσω στην έκδοση Bell Laboratories). οι ενσωματωμένες λειτουργίες tolower () και toupper () (από την έκδοση Bell Laboratories). και τις προδιαγραφές μετατροπής ANSI C στο printf (γίνεται πρώτα στην έκδοση Bell Laboratories).

Ιστορικά χαρακτηριστικά

Υπάρχουν δύο χαρακτηριστικά των ιστορικών υλοποιήσεων AWK που υποστηρίζει. Πρώτον, είναι εφικτή η κλήση της ενσωματωμένης συνάρτησης μήκους () όχι μόνο χωρίς κανένα επιχείρημα, αλλά ακόμη και χωρίς παρενθέσεις! Ετσι,

a = μήκος # Άγιος Αλγκόλ 60, Batman!

είναι το ίδιο με οποιοδήποτε από τα δύο

α = μήκος ()
α = μήκος ($ 0)

Αυτή η δυνατότητα έχει επισημανθεί ως `` deprecated '' στο πρότυπο POSIX και το gawk εκδίδει μια προειδοποίηση σχετικά με τη χρήση του εάν το --lint έχει καθοριστεί στη γραμμή εντολών.

Το άλλο χαρακτηριστικό είναι η χρήση είτε των δηλώσεων συνέχισης είτε του σπασίματος εκτός του σώματος μιας χρονικής περιόδου , για , ή βρόχο. Οι παραδοσιακές υλοποιήσεις AWK αντιμετωπίζουν τη χρήση τους ως ισοδύναμες με την επόμενη δήλωση. Το Gawk υποστηρίζει αυτή τη χρήση εάν έχει οριστεί - παραδοσιακό .

Επεκτάσεις GNU

Ο Gawk έχει αρκετές επεκτάσεις στο POSIX awk . Περιγράφονται σε αυτή την ενότητα. Όλες οι επεκτάσεις που περιγράφονται εδώ μπορούν να απενεργοποιηθούν με την επίκληση του gawk με την - παραδοσιακή επιλογή.

Τα ακόλουθα χαρακτηριστικά του gawk δεν είναι διαθέσιμα στο POSIX awk .

*

Δεν πραγματοποιείται αναζήτηση για τα αρχεία που ονομάζονται μέσω της επιλογής -f . Επομένως, η μεταβλητή περιβάλλοντος AWKPATH δεν είναι ειδική.

*

Η ακολουθία \ x escape. (Απενεργοποιημένη με --posix .)

*

Η συνάρτηση fflush () . (Απενεργοποιημένη με --posix .)

*

Η δυνατότητα να συνεχίσει τις γραμμές μετά ; και :. (Απενεργοποιημένη με --posix .)

*

Οκταλικές και δεκαεξαδικές σταθερές στα προγράμματα AWK.

*

Οι μεταβλητές ARGIND , BINMODE , ERRNO , LINT , RT και TEXTDOMAIN δεν είναι ξεχωριστές.

*

Η μεταβλητή IGNORECASE και οι παρενέργειες της δεν είναι διαθέσιμες.

*

Ο διαχωρισμός FIELDWIDTHS μεταβλητού πεδίου και σταθερού πλάτους.

*

Ο πίνακας PROCINFO δεν είναι διαθέσιμος.

*

Η χρήση του RS ως κανονική έκφραση.

*

Τα ειδικά ονόματα αρχείων που είναι διαθέσιμα για ανακατεύθυνση I / O δεν αναγνωρίζονται.

*

Ο χειριστής | & για τη δημιουργία συνδιαδικασιών.

*

Η δυνατότητα να διαχωρίσετε τους ξεχωριστούς χαρακτήρες χρησιμοποιώντας τη μηδενική συμβολοσειρά ως την τιμή του FS και ως το τρίτο επιχείρημα για το split () .

*

Το προαιρετικό δεύτερο όρισμα στη συνάρτηση close () .

*

Το προαιρετικό τρίτο όρισμα στη συνάρτηση αντιστοίχισης () .

*

Η δυνατότητα χρήσης προδιαγραφών θέσης με printf και sprintf () .

*

Η χρήση του πίνακα διαγραφής για τη διαγραφή ολόκληρου του περιεχομένου ενός πίνακα.

*

Η χρήση του επόμενου αρχείου για να εγκαταλείψει την επεξεργασία του τρέχοντος αρχείου εισόδου.

*

Οι εντολές as () , asort () , bindtextdomain () , compl () , dcgettext () , gensub () , lshift () , mktime () και xor () .

*

Εντοπισμένες χορδές.

*

Προσθέτοντας νέες ενσωματωμένες λειτουργίες δυναμικά με τη λειτουργία επέκτασης () .

Το βιβλίο AWK δεν καθορίζει την τιμή επιστροφής της λειτουργίας close () . Το κλείσιμο () του Gawk επιστρέφει την τιμή από το fclose (3) ή το pclose (3), όταν κλείνει ένα αρχείο εξόδου ή σωλήνα, αντίστοιχα. Επιστρέφει την κατάσταση εξόδου της διαδικασίας όταν κλείνει ένα σωλήνα εισόδου. Η τιμή επιστροφής είναι -1 αν το αρχείο, ο σωλήνας ή η συνδιαδικασία δεν ανοίχτηκαν με ανακατεύθυνση.

Όταν το gawk καλείται με την - παραδοσιακή επιλογή, εάν το όρισμα fs στην επιλογή -F είναι `` t '', τότε το FS έχει οριστεί στον χαρακτήρα της καρτέλας. Σημειώστε ότι η πληκτρολόγηση gawk -F \ t ... απλά προκαλεί το κέλυφος να παραθέσει το `` t '' και δεν περάσει `` \ t '' στην επιλογή -F . Δεδομένου ότι πρόκειται για μια αρκετά άσχημη ειδική περίπτωση, δεν είναι η προεπιλεγμένη συμπεριφορά. Αυτή η συμπεριφορά επίσης δεν προκύπτει αν έχει οριστεί το --posix . Για να αποκτήσετε πραγματικά έναν χαρακτήρα καρτέλας ως διαχωριστικό πεδίου, είναι καλύτερο να χρησιμοποιήσετε μεμονωμένα εισαγωγικά: gawk -F '\ t' ....

Δείτε άλλες εντολές : wait , lp , complete , execv , getfacl , ioctl , uniq , rmmod , pvcreate , rsh , unix2dos , cal , fs , cd , iwpriv , swapon , autofs , σε , ποιος , iwconfig , ifconfig , vgdisplay , ανοικτός , lsmod , ntohs , mailq , kill , wtmp