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

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
UNIX.
Advertisements

HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ
Βασικές Έννοιες Προγραμματισμού
Τεχνικές Προγραμματισμού με την JavaScript Στυλιάδης Κων/νος Φλώρινα, Οκτώβριος 2004.
7.3.8 Μεταφραστές Ελληνογαλλική Σχολή Καλαμαρί - Τίκβα Χριστίνα.
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ΥΠΟΡΟΥΤΙΝΕΣ
5η Συνάντηση Εκπαιδευτικών Πληροφορικής στη Δυτική Μακεδονία Πτολεμαΐδα, 29 Σεπτ 2005 Δημιουργία Δυναμικών Ιστοσελίδων με PHP και Dreamweaver MX Στυλιάδης.
Δομές Διακλάδωσης Μην ελπίζεις ότι θα ξεφύγεις αν κάνεις κάποιο κακό. Γιατί κι αν ξεφύγεις απ’ τη προσοχή των άλλων, θα υποπέσεις στην αντίληψη της συνείδησής.
Ένα απλό πρόγραμμα σε C /* ********************************************* * This program prints out the sentence “This is a test.” * *********************************************
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ΤΜΗΜΑΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
Σύνταξη CELL(Είδος πληροφορίας; Κελί)
ΣΤΟΙΧΕΙΑ ΨΕΥΔΟΚΩΔΙΚΑ ΒΑΣΙΚΕΣ ΔΟΜΕΣ ΒΑΣΙΚΟΙ ΑΛΓΟΡΙΘΜΟΙ ΠΙΝΑΚΩΝ
Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού
Αναδρομη και static Γραψετε την συναρτηση sequence_size που διαβαζει μια απροσδιοριστου μεγεθους σειρας και υπολογιζει και τυπωνει το μεγεθος της. int.
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος.
Εντολες Επιλογης (Selection)
Εισαγωγή στο MATLAB.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πίνακες Κλάσεις και Αντικείμενα.
Συναρτήσεις Κληση/Επιστροφη Παραμετροι
Φροντηστήριο Διαχείριση Περιεχομένου Παγκόσμιου Ιστού και Γλωσσικά Eργαλεία.
Προγραμματισμός PASCAL Πληροφορική Γ' Λυκείου μέρος γ
ΗΥ-150 Προγραμματισμός Εντολές Ελέγχου Ροής.
PL/SQL.
Προγραμματισμός στο ΜatLab
Γλωσσική Τεχνολογία String Handling – Regular Expressions.
Regular Expressions. Regular Expressions - γενικά  Βασική ιδέα: έχουμε ένα pattern και ένα κείμενο εισόδου. Εφαρμόζουμε το pattern στο κείμενο και μπορούμε:
ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων. Πίνακας Συμβόλων (Symbol Table) (Ι)  Είναι μια δομή στην οποία αποθηκεύονται τα ονόματα ενός προγράμματος και.
Η ΓΛΩΣΣΑ C ΜΑΘΗΜΑ 2.
Ολυμπιάδα Πληροφορικής
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ
Microsoft Excel 4.4 Τύποι και Συναρτήσεις
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
ΗΥ302 Διδακτική της Πληροφορικής Η γλώσσα προγραμματισμού LOGO Writer Ομάδα Εργασία: Αλεβίζου Βασιλική (Α.Μ.:1029) Κοφφινά Ιωάννα (Α.Μ.:1035) Τριανταφυλλίδου.
Προγραμματισμός ΙΙ Διάλεξη #5: Εντολές Ανάθεσης Εντολές Συνθήκης Δρ. Νικ. Λιόλιος.
Μεταβλητές – εντολές εκχώρησης- δομή ακολουθίας
ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων Φροντιστήριο - 30/04/2009.
Ενότητα Α.4. Δομημένος Προγραμματισμός
Βάσεις Δεδομένων Εργαστήριο ΙΙI Τμήμα Πληροφορικής ΑΠΘ
Επικοινωνία Ανθρώπου Μηχανής HTML CGI JAVASCRIPT Κουμπούλης Χρήστος Α.Μ. 921 Χαλαβαζής Βασίλης Α.Μ. 988.
Slide 1/42 ΗΥ – 340 Γλώσσες και Μεταφραστές Φροντιστήριο Εισαγωγή στο Flex.
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ 2: ΘΕΜΑΤΑ ΘΕΩΡΗΤΙΚΗΣ ΕΠΙΣΤΗΜΗΣ Η/Υ
ΘΠ06 - Μεταγλωττιστές Εισαγωγή στον Bison Φροντιστήριο - 23/03/2010.
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
Διαφάνειες παρουσίασης #2
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι 4-1 Στην ενότητα αυτή θα μελετηθεί η χρήση στοιβών στις εξής εφαρμογές: Αναδρομικές συναρτήσεις Ισοζυγισμός Παρενθέσεων.
Βασικά στοιχεία της Java
ΚΕΦΑΛΑΙΟ Το αλφάβητο της ΓΛΩΣΣΑΣ
Βασικές έννοιες προγραμματισμού Κεφάλαιο 7 ο. Βασικές έννοιες προγραμματισμού Αλφάβητο και τύποι δεδομένων Σταθερές και μεταβλητές Τελεστές, συναρτήσεις.
Δημιουργοί ΝΑΤΣΙΟΥΛΗΣ ΓΕΩΡΓΙΟΣ ΠΑΠΑΣ ΑΘΑΝΑΣΙΟΣ ΤΟΣΙΟΣ ΧΡΗΣΤΟΣ
ΜΕΤΑΒΛΗΤΕΣ-ΣΤΑΘΕΡΕΣ -ΕΚΦΡΑΣΕΙΣ
Βρόχος Do … Loop Σκοπός Μαθήματος Χρήση Do… Loop για την εκτέλεση μιας ομάδας εντολών μέχρι να εκπληρωθεί μια συγκεκριμένη συνθήκη.
Αρχεσ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ ΤΑξη Β΄
Εφαρμογές Υπολογιστών
ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ
Ενισχυτική διδασκαλία
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Αρχεσ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ ΤΑξη Β΄
Αρχεσ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ ΤΑξη Β΄
Τύποι Μεταβλητών Τελεστές Βασική Είσοδος/Έξοδος
Μανασσάκης Βασίλης Καθηγητής Πληροφορικής
Εισαγωγή στην Πληροφορική μεγάλου όγκου δεδομένων
Εντολές και δομές αλγορίθμου
Select Case Σκοπός: Εκμάθηση της εντολής (δομής) Select Case ώστε να μπορείτε να διαλέγετε μια επιλογή ανάμεσα σε πολλές διαθέσιμες στον κώδικα του προγράμματος.
Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον ΑΕΠΠ
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΩΝ Η/Υ
Κανονικές εκφράσεις ή παραστάσεις (Regular Expressions)
Λήψη Αποφάσεων και Συναρτήσεις Ελέγχου
Μεταγράφημα παρουσίασης:

AWK Μία εξαιρετικά δυναμική συμβολική γλώσσα προγραμματισμού και ταυτόχρονα ένα εργαλείο διαχείρισης δεδομένων. Αναζητά, τροποποιεί αρχεία, δημιουργεί reports... Ολες οι παραπάνω ενέργειες πραγματοποιούνται με την αναζήτηση patterns σε γραμμές που δίνονται στην είσοδο (αρχείο ή standard input). Alfred Aho, Peter Weinberger, Brian Kernigham. A W K

Η γλώσσα awk Ενα awk πρόγραμμα αποτελείται από μία ή περισσότερες εντολές της μορφής: pattern {action} Σύνταξη: awk ‘/pattern/ {action}’ input_filename Αν παραληφθεί το input_filename τότε θεωρείται το standard input. Παράδειγμα $ awk ‘/732-/ {print $1}’ phones $ awk –f awkprogram

Η γλώσσα awk Η awk λειτουργεί με τα πεδία των γραμμών εισόδου. Τα πεδία είναι λέξεις που διαχωρίζονται με τον χαρακτήρα του κενού ή κάποιο άλλον χαρακτήρα (field separator). Η awk θεωρεί default το χαρακτήρα του κενού. Η χρήση του option –F δίνει τη δυνατότητα προσδιορισμού άλλου χαρακτήρα ως field separator. Αναφορά στα πεδία τόσο των awk patterns όσο και των awk προγραμμάτων γίνεται με το σύμβολο του $ ακολουθούμενο από τον αριθμό του πεδίου ($1, $2 κλπ). Δεν υπάρχει περίπτωση σύγχυσης του συμβολισμού των πεδίων με αυτόν των παραμέτρων θέσης στα scripts επειδή τα πρώτα περικλείονται σε μονά εισαγωγικά ‘ ’.

Η γλώσσα awk - Παραδείγματα $ ls –l > newfiles 1.$ awk ‘$3 == “adm” {print}’ newfiles ίσο Ελεγχος του 3ου πεδίου κάθε γραμμής του αρχείου newfiles για το αν είναι ίσο με το pattern «adm”. Αν ναι, τότε τυπώνεται ολόκληρη η γραμμή που βρέθηκε το pattern. 2.$ awk ‘$3 ~ “adm” {print}’ newfiles περίπου ίσο Ελεγχος του 3ου πεδίου κάθε γραμμής του αρχείου newfiles για το αν είναι περίπου ίσο με το pattern «adm”, δηλαδή, αν το 3ο πεδίο περιλαμβάνει το pattern “adm”. Αν ναι, τότε τυπώνεται ολόκληρη η γραμμή που βρέθηκε το pattern.

Η γλώσσα awk - Παραδείγματα 3.$ awk ‘$3 ~ “adm” {print $9, $5}’ newfiles περίπου ίσο όχι Ελεγχος του 3ου πεδίου κάθε γραμμής του αρχείου newfiles για το αν είναι περίπου ίσο με το pattern “adm”, δηλαδή, αν το 3ο πεδίο περιλαμβάνει το pattern “adm”. Αν ναι, τότε τυπώνεται το 9ο και το 5ο πεδίο και όχι ολόκληρη η γραμμή που βρέθηκε το pattern. 4.$ awk ‘$3 != “root” {print}’ newfiles δεν είναι ίσο Ελεγχος του 3ου πεδίου κάθε γραμμής του αρχείου newfiles για το αν δεν είναι ίσο με το pattern “root”. Ετσι, τυπώνονται όλες οι γραμμές που δε βρέθηκε το pattern “root”.

5.$ awk –F: ‘$1 == “root” {print}’ /etc/passwd ίσο Ελεγχος του 1ου πεδίου κάθε γραμμής του αρχείου passwd που έχει field separator το χαρακτήρα ‘:’, για το αν είναι ίσο με το pattern “root”, δηλαδή, αν το 1ο πεδίο περιλαμβάνει το pattern “root”. Αν ναι, τότε τυπώνεται ολόκληρη η γραμμή που βρέθηκε το pattern. 6.$ awk –F: ‘$4 == 0 {print}’ /etc/passwd ίσο Ελεγχος του 4ου πεδίου κάθε γραμμής του αρχείου passwd για το αν είναι ίσο με το ‘0’, δηλαδή, αν ο user ανήκει στο group που ανήκει και ο root. Ετσι, τυπώνονται όλες οι γραμμές των users που ανήκουν στο ίδιο group με το root. Η γλώσσα awk - Παραδείγματα

7.$ awk –F: ‘$4 < 14 {print}’ /etc/passwd μικρότερο Ελεγχος του 4ου πεδίου κάθε γραμμής του αρχείου passwd που έχει field separator το χαρακτήρα ‘:’, για το αν είναι μικρότερο από την τιμή 14. Ετσι, τυπώνονται όλες οι γραμμές εκείνων των users που ανήκουν στα group $ awk –F: ‘$4 <= 14 {print}’ /etc/passwd μικρότερο ή ίσο Ελεγχος του 4ου πεδίου κάθε γραμμής του αρχείου passwd για το αν είναι μικρότερο ή ίσο από το ‘14’. Ετσι, τυπώνονται όλες οι γραμμές εκείνων των users που ανήκουν στα group Η γλώσσα awk - Παραδείγματα

9.$ awk –F: ‘$4 != 14 {print}’ /etc/passwd δεν είναι ίσο Ελεγχος του 4ου πεδίου κάθε γραμμής του αρχείου passwd που έχει field separator το χαρακτήρα ‘:’, για το αν δεν είναι ίσο με την τιμή 14. Ετσι, τυπώνονται όλες οι γραμμές εκείνων των users που ανήκουν σε οποιοδήποτε άλλο group εκτός από το $ awk –F: ‘$4 >= 14 {print}’ /etc/passwd μεγαλύτερο ή ίσο Ελεγχος του 4ου πεδίου κάθε γραμμής του αρχείου passwd για το αν είναι μεγαλύτερο ή ίσο από το ‘14’. Ετσι, τυπώνονται όλες οι γραμμές εκείνων των users που ανήκουν στα group 14-. Η γλώσσα awk - Παραδείγματα

11.$ awk –F: ‘$4 > 14 {print}’ /etc/passwd μεγαλύτερο Ελεγχος του 4ου πεδίου κάθε γραμμής του αρχείου passwd που έχει field separator το χαρακτήρα ‘:’, για το αν είναι μεγαλύτερο από την τιμή 14. Ετσι, τυπώνονται όλες οι γραμμές εκείνων των users που ανήκουν στα group 14-.

Η γλώσσα awk στον προγραμματισμό στο Shell $ who | awk ‘{print $2}’$ who | awk ‘{print $2}’ Εμφανίζεται λίστα με τα τερματικά μόνο που είναι ενεργά στο σύστημα και αφού το όνομα τους βρίσκεται στο δεύτερο πεδίο μιας λίστας της εντολής who.

Η γλώσσα awk - Παραδείγματα 1.$ cat > awkprg1 /widget/ {print} ^C $ awk –f awkprg1 2.$ cat > awkprg2 /widget/ {w_count=w_count+1} ^C $ awk –f awkprg2 3.$ nawk ‘/widget/ {print}’ inventory 4.$ cat > phones JudySeattle FranMiddletown JudyRumson RonIthaca ^C $ nawk ‘/908-/ {print $1}’ phones

Η γλώσσα awk - Παραδείγματα 5.$ nawk ‘{print $1}’ phones 6.$ nawk –F, ‘/Judy/ {print}’ phones 7.$ nawk –F”\t” ‘/Judy/ {print}’ phones 8.$ nawk ‘length($2) > 6’ phones 9.$ nawk ‘{print $1}’ phones > namelist 10.$ nawk ‘{print $1}’ phones1 phones2 11.$ nawk –f progfile input_file

12.$ nawk ‘{temp = $1;$1 = $2;$2 = temp;print}’ phones > newphones ή $ cat > awkprg3 # this is a multi-line awk program {temp = $1; $1 = $2; $2 = temp; print} ^C $ nawk –f awkprg3 phones > newphones Η γλώσσα awk - Παραδείγματα

Η γλώσσα awk - Patterns Κανονικές εκφράσεις(Regular expressions)Κανονικές εκφράσεις(Regular expressions) Σειρές γραμμάτων, αριθμών και ειδικών χαρακτήρων που καθορίζουν το string που αναζητάται. Pattern σύγκρισης (Comparison patterns)Pattern σύγκρισης (Comparison patterns) Patterns με τα οποία γίνεται σύγκριση δύο στοιχείων με χρήση τελεστών όπως =, καθώς και τελεστών σύγκρισης για strings. Χρησιμοποιούνται για σύγκριση αριθμών και strings. Σύνθετα patterns (Compound patterns)Σύνθετα patterns (Compound patterns) Δημιουργούνται από άλλα patterns με χρήση των λογικών τελεστών and ( && ), or ( || ) και not ( ! ). Χρησιμοποιούνται για σύγκριση αριθμών και strings και συνδυασμού αριθμών με strings.

Η γλώσσα awk - Patterns Pattern περιοχής-ζώνης (Range patterns)Pattern περιοχής-ζώνης (Range patterns) Χρησιμοποιούνται για αναζήτηση γραμμών μεταξύ μιας εμφάνισης ενός pattern και μιας εμφάνισης ενός δεύτερου pattern. BEGIN και END patternsBEGIN και END patterns Πρόκειται για ειδικά ενσωματωμένα patterns που στέλνουν οδηγίες σε ένα πρόγραμμα awk για την εκτέλεση ενεργειών (actions) πριν ή μετά τον κύριο βρόχο επεξεργασίας.

Η γλώσσα awk – String Patterns Σε ένα awk πρόγραμμα μπορούν να χρησιμοποιηθούν: –Ενα απλό string pattern (π.χ /Rumson/) –Ενα string pattern που να περιέχει ειδικούς χαρακτήρες από μια κανονική έκφραση: 1952 (αναζήτηση του 1952) \t (το escape sequence του χαρακτήρα tab) ^15 (αναζήτηση του 15 στην αρχή μιας γραμμής) 29$ (αναζήτηση ενός string με το 29 στο τέλος μιας γραμμής) [123] (αναζήτηση του 1, 2, ή 3) [1-3] (επίσης αναζήτηση του 1, 2, ή 3)

Η γλώσσα awk – String Patterns Θεωρείστε το αρχείο inventory με περιεχόμενα: pencils markers memos notebooks erasers books /marker*/ (αναζήτηση του marker ή markers) /^books/ (αναζήτηση του books και όχι του notebooks)

Η γλώσσα awk – String Patterns –Μια string έκφραση που περιέχει τελεστές string όπως είναι οι τελεστές σύγκρισης. $2 ~ /^15/ (αναζήτηση του πεδίου 2 αν αρχίζει από 15) $2 ~ /^15$/ (αναζήτηση του πεδίου 2 αν είναι το 15) $1 == $3 (έλεγχος αν το πεδίο 1 είναι το ίδιο με το πεδίο 3) $1 != “pencils” (αναζήτηση γραμμών στις οποίες το πεδίο 1 δεν είναι “pencils”) $2 > “Johnson” (αναζήτηση γραμμών στις οποίες το πεδίο 2 ακολουθεί το “Johnson” με αλφαβητική σειρά) $4 != $3 +15 (αναζήτηση γραμμών στις οποίες το πεδίο 4 δεν είναι ίσο με το άθροισμα του πεδίου 3 και του αριθμού 15) $1 + $2 >= 13 (αναζήτηση γραμμών στις οποίες το άθροισμα των πεδίων 1 και 2 είναι μεγαλύτερο από ή ίσο με τον αριθμό 13) $1 > $2 + day (αναζήτηση γραμμών στις οποίες το πεδίο 1 είναι μεγαλύτερο από το άθροισμα του πεδίου 2 και της μεταβλητής day)

Η γλώσσα awk – String Patterns ΠαράδειγμαΠαράδειγμα προγράμματος που λειτουργεί σε ένα αρχείο κειμένου μορφοποιημένο για την troff. Ενα συνηθισμένο λάθος στα αρχεία troff είναι η παράλειψη να κλείσει ένα display που ξεκινά με.DS (Display Start) με το αντίστοιχό του.DE (Display End). Το πρόγραμμα που ακολουθεί ελέγχει αν για κάθε.DS υπάρχει το αντίστοιχο.DE /\.DS/ && display==1 {print “Missing DE before line ” NR} /\.DS/ && display==0 {display=1} /\.DE/ && display==0 {print “Extra DE at line ” NR} /\.DE/ && display==1 {display=0;discountt++} END {print “Found ” discountt “ matched displays”} /200/,/299/ (αναζήτηση γραμμών στις οποίες βρίσκεται ένας αριθμός από το 200 μέχρι και το 299)

Η γλώσσα awk – Numeric Patterns και BEGIN / END Ολα τα string patterns που περιγράφηκαν λειτουργούν και για numeric patterns εκτός από αυτά των κανονικών εκφράσεων και από τον τελεστή tilde (~). $1 < 10 && $2 <= 30 (αναζήτηση γραμμών όπου το πεδίο 1 είναι μικρότερο του 10 και το πεδίο 2 μικρότερο από ή ίσο με το 30) Το ειδικό pattern BEGIN υποδηλώνει ότι η ενέργεια που έπεται θα εκτελεστεί πριν από την επεξεργασία οποιασδήποτε άλλης εισόδου (δηλ. πριν το διάβασμα της πρώτης γραμμής). Το ειδικό pattern END υποδηλώνει ότι η ενέργεια που έπεται θα εκτελεστεί μετά και από την τελευταία επεξεργασία εισόδου (δηλ. μετά το διάβασμα της τελευταίας γραμμής). BEGIN {FS=“,”;print “NameOn hand CostPrice”} (θέτει το field separator σε, με χρήση της μεταβλητής FS και εμφανίζει μια επικεφαλίδα στην αρχή μιας λίστας) $nawk ‘END {print NR}’ inventory (διαβάζει τις γραμμές του αρχείου inventory και εμφανίζει τον αριθμό των γραμμών χρησιμοποιώντας τη μεταβλητή NR)

Η γλώσσα awk – Ενέργειες (Actions) Εμφάνιση γραμμών (print). Εκχώρηση τιμής σε μεταβλητή. Κλήση δομών ελέγχου. Κλήση συναρτήσεων οριζόμενων από το χρήστη. Χρήση ειδικών εντολών για τον έλεγχο εισόδου/εξόδου (input/output).

Η γλώσσα awk – Μεταβλητές (Variables) Οι μεταβλητές σε ένα πρόγραμμα awk μπορούν να περιέχουν strings ή αριθμούς. Το όνομα μιας μεταβλητής αρχίζει με ένα γράμμα και μπορεί να αποτελείται από γράμματα, αριθμούς και το _ (underscore). Δε γίνεται δήλωση μεταβλητών. Καθορίζεται ο τύπος τους από τον τρόπο που χρησιμοποιούνται και αλλάζει εφόσον αλλάζει και ο τρόπος. Αρχική τιμή σε μια μεταβλητή είναι το null για τα strings και το 0 για τις αριθμητικές μεταβλητές. Ολές οι μεταβλητές είναι καθολικές (global) σε ένα awk πρόγραμμα αλλά όχι και για τις συναρτήσεις που ορίζονται από το χρήστη. Η γλώσσα awk επιτρέπει τη δημιουργία μεταβλητών, την εκχώρηση τιμών σε αυτές και την εκτέλεση διαφόρων λειτουργιών πάνω σε μια μεταβλητή.

Η γλώσσα awk – Ενσωματωμένες Μεταβλητές (Built –In Variables) Μεταβλητή (Variable) Περιγραφή FSInput field separator OFSOutput field separator NFNumber of fields in the current record NRNumber ofn records read so far FILENAMEName of the input file FNRRecord number in current file RSInput record separator ORSOutput record separator OFMTOutput format for numbers RLENGTHSet by the match function to match length RSTARTSet by the match function to match length SUBSEPSubscript separator, used in arrays ARGCNumber of command line arguments ARGVArray of command line arguments

Η γλώσσα awk – Ενέργειες με Πεδία και Αριθμούς Πεδίων Τα πεδία (field identifiers) και οι αριθμοί των πεδίων (field numbers) αποτελούν ένα ειδικό είδος ενσωματωμένων μεταβλητών. Μπορεί να τους εκχωρηθεί τιμή, να τροποποιηθεί η τιμή τους και να συγκριθούν με άλλες μεταβλητές αριθμητικές ή strings. Με αυτό τον τρόπο μπορούν να δημιουργηθούν νέα πεδία, να διαγραφεί κάποιο πεδίο, ή να αλλάξει η σειρά δύο ή περισσότερων πεδίων ενός αρχείου. Παράδειγμα: pencils {$5 = $2 * $4 print $0} (υπολογισμός της συνολικής αξίας κάθε στοιχείου του αρχείου, πολλαπλασιάζοντας σε κάθε γραμμή το πεδίο 2 με το πεδίο 4 και δημιουργώντας ένα 5ο πεδίο με τη συνολική τιμή στο τέλος κάθε γραμμής και εμφάνιση τέλος ολόκληρης της γραμμής) /pencil*/ {$6=“Empire”} (δημιουργία ενός νέου πεδίου, του πεδίου 6, σαν πεδίο string, με περιεχόμενο τη λέξη “Empire”. {print $NF} (εμφάνιση του τελευταίου πεδίου και όχι του αριθμού των πεδίων σε ένα αρχείο όπου το πλήθος των πεδίων κυμαίνεται από γραμμή σε γραμμή (not fixed).

Η γλώσσα awk – Συναρτήσεις και Λειτουργίες με Strings Εκχώρηση τιμής σε μεταβλητή string label = “inventory” (εκχώρηση της τιμής inventory στη μεταβλητή label. Η χρήση των εισαγωγικών είναι υποχρεωτική, διαφορετικά εκχωρείται το περιεχόμενο της μεταβλητής inventory στη μεταβλητή label) Συνένωση δύο string μεταβλητών σε μία code = $6 “001” (π.χ για τη γραμμή pencils Empire γίνεται pencils Empire001 ) Συναρτήσεις για μεταβλητές string Χρήση λογικών τελεστών για τη δημιουργία σύνθετων patterns

Η γλώσσα awk – Συναρτήσεις και Λειτουργίες με Αριθμούς Χρήση των αριθμητικών τελεστών +,-,*,/,% και ^ Χρήση των τελεστών εκχώρησης =,+=,-=,*=,/=,%= και ^= Χρήση των τελεστών αύξησης και μείωσης ++ και -- Χρήση των ενσωματωμένων αριθμητικών συναρτήσεων: –cos (συνημιτόνου), –atan2 (εφαπτομένης), –log (λογάριθμου), –exp (exponential), –int (ακέραιο μέρος αριθμού), –rand (τυχαίος αριθμός μεταξύ 0 και 1).

Η γλώσσα awk – Πίνακες Η χρήση ενός πίνακα σε ένα awk πρόγραμμα δεν απαιτεί την προηγούμενη δήλωση ή τον ορισμό του πίνακα. Ορίζοντας το περιεχόμενο ενός στοιχείου του πίνακα, ορίζεται αυτόματα ο πίνακας. Στην awk υπάρχουν οι λεγόμενοι associative arrays, πίνακες που χρησιμοποιούν strings αντί για αριθμούς στην περιγραφή μιας θέσης του πίνακα, π.χ. votes[republicants] και votes[democrats]. Ορισμός πίνακα: –Με την εκχώρηση μιας τιμής σε αυτόν stock[1] = $2 –Με την εκχώρηση μιας τιμής σε αυτόν, π.χ. στη θέση που ονομάζεται από την τιμή του πεδίου 1 number[$1] = $2 Αν η τιμή του πεδίου 1 είναι pencils τότε δημιουργείται ένα στοιχείο στον πίνακα ως εξής: number[pencils] = 108

Η γλώσσα awk – Πίνακες Χρήση πίνακα: –Σαν οποιαδήποτε άλλη μεταβλητή –Με χρήση της επαναληπτικής διαδικασίας for-in επιτυγχάνεται πρόσβαση σε όλα τα στοιχεία ενός πίνακα, π.χ. /\.DS/ {count[“display”]++} /\.BL/ {count[“bullet”]++} /\.TS/ {count[“table”]++} END {for (s in count) print s, count[s]} –Χρήση της συνάρτησης διαγραφής ενός στοιχείου από ένα πίνακα: Delete array[subscript] –Ελεγχος ύπαρξης ενός στοιχείου σε ένα πίνακα: subscript in array επιστρέφει την τιμή 1 αν το στοιχείο array[subscript] υπάρχει και 0 αν δεν υπάρχει.

Η γλώσσα awk – Συναρτήσεις Οριζόμενες από το Χρήστη Συναρτήσεις που ορίζονται μέσα σε ένα πρόγραμμα awk και καλούνται από αυτό. Μπορούν να οριστούν παράμετροι σε μια συνάρτηση (τιμές ή μεταβλητές) και μπορεί να επιστρέφει μία τιμή. Με τον ορισμό μιας συνάρτησης, μπορεί να γίνει χρήση αυτής είτε σε pattern είτε σε action, οπουδήποτε γενικά θα μπορούσε να χρησιμοποιηθεί μια ενσωματωμένη συνάρτηση (π.χ. length() ). Ορισμός συνάρτησης: –Για τον ορισμό μιας συνάρτησης προσδιορίζονται το όνομά της, οι παράμετροί της και οι ενέργειες που θα εκτελέσει, με την ακόλουθη μορφή: function function_name ( list of parameters ) { action_list } Παράδειγμα: function in_range(testval,lower,upper) { if (testval > lower && testval < upper) return 1 else return 0 }

Η γλώσσα awk – Συναρτήσεις Οριζόμενες από το Χρήστη –Δεν επιτρέπεται το κενό ανάμεσα στο όνομα της συνάρτησης και στην αριστερή παρένθεση της λίστας των παραμέτρων. –Το return είναι προαιρετικό αλλά αν δε χρησιμοποιηθεί δεν επιστρέφεται τιμή. Κλήση συνάρτησης: –Μετά τον ορισμό μιας συνάρτησης η κλήση γίνεται όπως ακριβώς με μια ενσωματωμένη συνάρτηση, π.χ.: if (in_range($5,10,15)) print “Found a match!” –Οι συναρτήσεις μπορούν να είναι αναδρομικές, π.χ.: function factorial(n) { if (n<=1) return 1 else return n * factorial(n-1) } Η κλήση της συνάρτησης μπορεί να είναι π.χ. print factorial(3)

Η γλώσσα awk – Δομές Ελέγχου ifΗ δομή if: –if (condition) action Παράδειγμα: /pencil*/ {pencils += $2} END {if(pencils < 144) print “Must order more pencils”} if – thenΗ δομή if – then σε μια γραμμή: –expression1 ? expression2 : expression3 Παράδειγμα: $1 > ? ++high : ++low whileΗ δομή while: –while(condition) { action } Παράδειγμα: Smith {sum=0Major I=2Minor while (I<=NF) { sum += $I i++} average=sum/(NF-1) print “The average for “ $1 “ is “ average }

Η γλώσσα awk – Δομές Ελέγχου do-whileΗ δομή do-while: –do action while(condition) forΗ δομή for: –for (initial statement; test; increment) statement Παράδειγμα: {sum=0 for (i=2; i<=NF; i++) sum+=$I average=sum/(NF-1) print “The average for “ $1” is “ average} breakΗ εντολή break: –Προκαλεί την έξοδο από τον πιο άμεσο (εσωτερικότερο) βρόχο. exitΗ εντολή exit: –Προκαλεί τη διακοπή της ανάγνωσης της εισόδου. Όταν σε ένα πρόγραμμα awk βρεθεί ένα exit, τότε ο έλεγχος του προγράμματος μεταφέρεται στην END εφόσον υπάρχει αλλιώς σταματάει το πρόγραμμα awk.

Η γλώσσα awk – Είσοδος - Έξοδος Είσοδος από αρχείο –Διάβασμα μιας γραμμής από το stdin και εκχώρηση αυτής σε μια μεταβλητή. getline X –Για το διάβασμα μιας γραμμής από αρχείο γίνεται ανακατεύθυνση στη getline. getline < “my_file” –Διάβασμα μιας γραμμής από ένα αρχείο και εκχώρηση αυτής σε μια μεταβλητή. getline var < “my_file” Είσοδος από το πληκτρολόγιο –Διάβασμα στοιχείων από το πληκτρολόγιο για την άμεση ενημέρωση ενός αρχείου. {print $1, “Old price:”, $4 getline new < “/dev/tty” $4=new print “New price:”, $0 > “outputfile”} Είσοδος από την έξοδο άλλης εντολής (|) –Διάβασμα του αρχείο ως έξοδο μιας άλλης εντολής. sort input_file | nawk –f progfile Έξοδος στην οθόνη print –Η εντολή print: print expr1, expr2, … BEGIN { OFS=“\t” } {print $1, $4} printf –Η εντολή printf