Εργαστήριο Λειτουργικών Συστημάτων. SED and AWK

Σχετικά έγγραφα
Διάλεξη 7 Εργαλεία Ωφελιμότητας Unix: Αwk

Στο εργαστήριο θα μελετηθούν: Διδάσκων: Γιώργος Χατζηπολλάς. Εργαστήριο 2: Εργαλεία Συστήματος UNIX. Ομάδες για παρουσίαση

Διάλεξη 6 Εργαλεία Ωφελιμότητας Unix: Sed

ΠΡΟΓΡΑΜΜΑΣΙΜΌ ΤΠΟΛΟΓΙΣΏΝ. Κεφάλαιο 8 Η γλϊςςα Pascal

Διάλεξη 6 Εργαλεία Ωφελιμότητας Unix: Sed

Δομζσ Αφαιρετικότθτα ςτα Δεδομζνα

17. Πολυδιάςτατοι πίνακεσ

ΛΕΙΤΟΥΓΙΚΆ ΣΥΣΤΉΜΑΤΑ. 5 ο Εργαςτιριο Ειςαγωγι ςτθ Γραμμι Εντολϊν

Δείκτεσ Διαχείριςθ Μνιμθσ. Βαγγζλθσ Οικονόμου Διάλεξθ 8

Οδηγίεσ προσ τουσ εκπαιδευτικοφσ για το μοντζλο τησ Αριθμογραμμήσ

Διαδικαςία Διαχείριςθσ Στθλϊν Βιβλίου Εςόδων - Εξόδων. (v.1.0.7)

Ιδιότθτεσ πεδίων Γενικζσ.

ΕΦΑΡΜΟΓΕ ΒΑΕΩΝ ΔΕΔΟΜΕΝΩΝ ΣΗ ΝΟΗΛΕΤΣΙΚΗ. Φιλιοποφλου Ειρινθ

ΕΡΓΑΣΗΡΙΑΚΗ ΑΚΗΗ 4.1

Ένα πρόβλθμα γραμμικοφ προγραμματιςμοφ βρίςκεται ςτθν κανονικι μορφι όταν:

Η γλώςςα προγραμματιςμού C

ςυςτιματα γραμμικϊν εξιςϊςεων

16. Πίνακεσ και Συναρτήςεισ

Πολυπλέκτες. 0 x 0 F = S x 0 + Sx 1 1 x 1

ΘΥ101: Ειςαγωγι ςτθν Πλθροφορικι

ΑΝΑΠΣΤΞΘ ΕΦΑΡΜΟΓΩΝ Ε ΠΡΟΓΡΑΜΜΑΣΙΣΙΚΟ ΠΕΡΙΒΑΛΛΟΝ 3 ο ΓΕΝΙΚΟ ΛΤΚΕΙΟ Ν. ΜΤΡΝΘ- ΕΠΙΜΕΛΕΙΑ: ΠΤΡΙΔΑΚΘ Λ.

Οδηγίεσ προσ τουσ εκπαιδευτικοφσ για το μοντζλο του Άβακα

Ραραμετροποίθςθ ειςαγωγισ δεδομζνων περιόδων

ΡΟΓΑΜΜΑΤΙΣΤΙΚΟ ΡΕΙΒΑΛΛΟΝ MICRO WORLDS PRO

Τυπικζσ Γλϊςςεσ Περιγραφισ Υλικοφ Διάλεξθ 4

5 ΜΕΘΟΔΟΙ - ΠΑΡΑΜΕΤΡΟΙ

Παράςταςη ακεραίων ςτο ςυςτημα ςυμπλήρωμα ωσ προσ 2

x n D 2 ENCODER m - σε n (m 2 n ) x 1 Παραδείγματα κωδικοποιθτϊν είναι ο κωδικοποιθτισ οκταδικοφ ςε δυαδικό και ο κωδικοποιθτισ BCD ςε δυαδικό.

GNSS Solutions guide. 1. Create new Project

Δομθμζνοσ Προγραμματιςμόσ. Βαγγζλθσ Οικονόμου Εργαςτιριο 9

1. Εγκατάςταςη κειμενογράφου JCE

ΕΦΑΡΜΟΓΖσ ΒΆΕΩΝ ΔΕΔΟΜΖΝΩΝ ΚΑΙ ΔΙΑΔΙΚΣΥΟΤ. Ειρινθ Φιλιοποφλου

ΟΝΟΜΑΣΟΛΟΓΙΑ ΠΑΡΑΜΕΣΡΩΝ ΓΙΑ ΠΡΟΑΡΜΟΜΕΝΕ ΑΝΑΦΟΡΕ. παραμζτρου> (Εμφανίηεται ςαν Caption ςτθν φόρμα των φίλτρων).

Στα προθγοφμενα δφο εργαςτιρια είδαμε τθ δομι απόφαςθσ (ι επιλογισ ι ελζγχου ροισ). Ασ κυμθκοφμε:

8 τριγωνομετρία. βαςικζσ ζννοιεσ. γ ςφω. εφω και γ. κεφάλαιο

Modellus 4.01 Συ ντομοσ Οδηγο σ

ΥΡΟΝΣΙΣΗΡΙΟ Μ. Ε. ΚΑΙ ΚΕΝΣΡΟ ΙΔΙΑΙΣΕΡΩΝ ΜΑΘΗΜΑΣΩΝ «ΚΤΡΙΣΗ» ΔΙΑΓΩΝΙΜΑ ΘΕΜΑΣΑ Β ΛΤΚΕΙΟΤ ΥΕΒΡΟΤΑΡΙΟ 2018 ΑΕΠΠ

Εργαςτιριο Βάςεων Δεδομζνων

Ηλεκτρονικι Επιχειρθςιακι Δράςθ Εργαςτιριο 1

Διαχείριςθ του φακζλου "public_html" ςτο ΠΣΔ

Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων. 19. Αλφαριθμητικά II. Ιωάννθσ Κατάκθσ. ΕΠΛ 032: Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων

Παράςταςη ςυμπλήρωμα ωσ προσ 1

Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων. 20. Αρχεία. Ιωάννθσ Κατάκθσ. ΕΠΛ 032: Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων

Μονάδες 6. Μονάδες ΓΑΨΕ Δεν υπάρχει ρίηα 2. ΑΝ Α>0 ΤΟΤΕ 3. ΤΕΛΟΣ_ΑΝ 4. ΑΛΛΙΩΣ 5. ίηα Τ_(Α)

Λειτουργικά. Συστήματα Ι. Φ ρ ο ν τ ι σ τ ή ρ ι ο. Αριστείδης Ηλίας. Εργαστήριο Ηλεκτρονικών Υπολογιστών

ΕΝΟΤΗΤΑ 2: ΕΠΙΚΟΙΝΩΝΩ ΜΕ ΤΟΝ ΥΠΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 5: Αρχεία - Φάκελοι

Διαδικαςία Προγράμματοσ Ωρομζτρθςθσ. (v.1.0.7)

Ειςαγωγι ςτο Δομθμζνο Προγραμματιςμό. Βαγγζλθσ Οικονόμου

Σύ ντομος Οδηγο ς χρη σης wikidot για τα projects

Εργαςτιριο Πικανοτιτων Σθμειϊςεισ προγραμματιςμοφ: βαςικζσ γνϊςεισ ανάπτυξθσ εφαρμογϊν. Κϊςτασ Αρβανιτάκθσ

ΗΛΕΚΣΡΟΝΙΚΗ ΤΠΗΡΕΙΑ ΑΠΟΚΣΗΗ ΑΚΑΔΗΜΑΪΚΗ ΣΑΤΣΟΣΗΣΑ

ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 7 θ Διάλεξθ Διαχείριςθ Μνιμθσ Μζροσ Γ

Μάθημα 9 ο ΤΕΧΝΙΚΕΣ ΔΙΑΧΕΙΡΙΣΗΣ ΕΙΚΟΝΙΚΗΣ ΜΝΗΜΗΣ

Θεςιακά ςυςτιματα αρίκμθςθσ

Βάςεισ Δεδομζνων Λ. Ενότθτα 8: SQL Γλώςςα χειριςμοφ δεδομζνων. Δρ. Σςιμπίρθσ Αλκιβιάδθσ Σμιμα Μθχανικών Πλθροφορικισ ΣΕ

ΕΡΓΑΣΗΡΙΟ ΕΦΑΡΜΟΜΕΝΗ ΠΛΗΡΟΦΟΡΙΚΗ

Συντακτικός Αναλυτής. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής

ΕΦΑΡΜΟΓΖσ ΒΆΕΩΝ ΔΕΔΟΜΖΝΩΝ ΚΑΙ ΔΙΑΔΙΚΣΥΟΤ. Ειρινθ Φιλιοποφλου

Εργαστήριο 6 Ασκήσεις: To Εργαλείo Ωφελιμότητας Awk Προγραμματισμός Κελύφους Bash

Διαδικασία Δημιοσργίας Ειδικών Λογαριασμών. (v.1.0.7)

ΔΟΜΗ ΑΠΛΗΣ ΕΠΙΛΟΓΗΣ Αςκήςεισ με ψευδογλώςςα/ διάγραμμα ροήσ. Αντώνης Μαϊργιώτης

Εργαστήριο 4: Εργαλεία Συστήματος UNIX. Διδάσκων: Γιώργος Χατζηπολλάς. Στο εργαστήριο θα μελετηθούν: Εργαστηριακή Άσκηση 2 Παραδείγματα χρήσης awk

Ειςαγωγι ςτθν Επιςτιμθ Υπολογιςτϊν. Ειςαγωγι ςτθν Python

Δομζσ Δεδομζνων Πίνακεσ

Διαδικαζία Διατείριζης Εκηύπωζης Ιζοζσγίοσ Γενικού - Αναλσηικών Καθολικών. (v )

Περιοριςμοί μιασ Β.Δ. ςτθν Access(1/3)

343 Ειςαγωγι ςτον Προγραμματιςμό

Ανάπτυξη Εφαρμογών με Σχεςιακέσ Βάςεισ Δεδομένων

ΠΑΝΕΠΙΣΤΗΜΙΟΥ ΠΕΛΟΠΟΝΝΗΣΟΥ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ

ΕΝΟΤΗΤΑ 2: ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 5: Γνωριμία με το λογιςμικό του υπολογιςτι

Joomla! - User Guide

Ειδικά Θζματα Βάςεων Δεδομζνων

ΠΑΝΕΠΙΣΘΜΙΟ ΔΤΣΙΚΘ ΜΑΚΕΔΟΝΙΑ ΣΜΘΜΑ ΜΘΧΑΝΙΚΩΝ ΠΛΘΡΟΦΟΡΙΚΘ ΚΑΙ ΣΘΛΕΠΙΚΟΙΝΩΝΙΩΝ. Λειτουργικά υςτιματα, 4 ο Εξάμθνο Ψθφιακι χεδίαςθ ΙΙ, 4 ο Εξάμθνο

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 6/5/2006

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Εγχειρίδιο Χριςθσ τθσ διαδικτυακισ εφαρμογισ «Υποβολι και παρακολοφκθςθ τθσ ζγκριςθσ Εκπαιδευτικών Πακζτων»

ΟΔΗΓΙΕ ΔΗΜΙΟΤΡΓΙΑ ΚΑΙ ΡΤΘΜΙΗ ΔΩΡΕΑΝ ΗΛΕΚΣΡΟΝΙΚΟΤ ΣΑΧΤΔΡΟΜΕΙΟΤ ΣΟ GOOGLE (G-MAIL)

Εγκατάσταση & Διαχείριση Joomla ΤΜΒΟΤΛΟ ΠΛΗΡΟΦΟΡΙΚΗ Ν. ΕΡΡΩΝ & ΚΕ.ΠΛΗ.ΝΕ.Σ. Ν. ΕΡΡΩΝ

Μερικές άλλες χρήσιμες εντολές

PERL. Δήμος Παύλου Δημήτρης Κουζαπάς

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι

Υπολογισμός - Εντολές Επανάληψης

Ενδεικτική Οργάνωςη Ενοτήτων. Α Σάξη. Διδ. 1 ΕΝΟΣΗΣΑ 1. 6 Ομαδοποίθςθ, Μοτίβα,

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ I

ΥΡΟΝΣΙ ΣΗΡΙΟ Μ. Ε. ΚΑΙ ΚΕΝΣΡΟ ΙΔΙΑΙΣΕΡΩΝ ΜΑΘΗΜΑΣΩΝ «ΚΤΡΙΣ Η» ΔΙΑΓΩΝΙ ΜΑ ΑΕΠΠ

Αςφάλεια και Προςταςία Δεδομζνων

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

8 ΥΜΒΟΛΟΕΙΡΕ - STRINGS

ΠΑΝΕΠΙΣΤΗΜΙΟΥ ΠΕΛΟΠΟΝΝΗΣΟΥ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ

Ποσοτικές Μέθοδοι Δρ. Χάϊδω Δριτσάκη

Epsilon Cloud Services

ΕΝΟΣΗΣΑ 1: ΓΝΩΡIΖΩ ΣΟΝ ΤΠΟΛΟΓΙΣΗ. ΚΕΦΑΛΑΙΟ 2: Σο Τλικό του Τπολογιςτι

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ I

Αρχεία Ένα αρχείο αποτελείται από μία σειρά ομοειδών δεδομένων που ονομάζονται λογικές εγγραφές (logical record)

Αυτόματη δημιουργία στηλών Αντιστοίχηση νέων λογαριασμών ΦΠΑ

ΕΝΟΤΗΤΑ 2: ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 6: Το γραφικό περιβάλλον Επικοινωνίασ (Γ.Π.Ε)

TIM Εικονικό Περιβάλλον Συνεργασίας Οδθγίεσ Χριςθσ

Αυτόνομοι Πράκτορες. Αναφορά Εργασίας Εξαμήνου. Το αστέρι του Aibo και τα κόκαλα του

ΑΔΡΑΝΕΙΑ ΜΑΘΗΣΕ: ΜΑΡΙΑΝΝΑ ΠΑΡΑΘΤΡΑ ΑΝΑΣΑΗ ΠΟΤΛΙΟ ΠΑΝΑΓΙΩΣΗ ΠΡΟΔΡΟΜΟΤ ΑΝΑΣΑΙΑ ΠΟΛΤΧΡΟΝΙΑΔΟΤ ΙΩΑΝΝΑ ΠΕΝΓΚΟΤ

3 θ διάλεξθ Επανάλθψθ, Επιςκόπθςθ των βαςικϊν γνϊςεων τθσ Ψθφιακισ Σχεδίαςθσ

Transcript:

Εργαστήριο Λειτουργικών Συστημάτων SED and AWK

Σύνδεση με τα προηγούμενα Από ποφ αντλείται θ δφναμθ του προγραμματιςμοφ SHELL? Στο Unix όλα είναι ζνα αρχεία Output redirection και pipes είναι βαςικά εγγραφι/ανάγνωςθ κατάλλθλων file descriptors. Το περιβάλλον του κελφφουσ ζχει λογικι όπωσ οι γλϊςςεσ προγραμματιςμοφ: for, foreach, if-else, switch, variables, evaluation... Υπάρχουν άπειρεσ μικρζσ εντολζσ των οποιϊν τα αποτελζςματα, χριςει των παραπάνω, μποροφν να ςυνδυαςτοφν: finger Bob grep Login awk,print$2":"$4""$5- lp Η διαχείριςθ κειμζνου δίνει επιπλζον δφναμθ sed και awk. 2

sed (stream editor) Είςοδοσ από αρχείο ι pipe - ζξοδοσ αντίςτοιχα Φιλτράρει και επεξεργάηεται το κείμενο ειςόδου και το δίνει ςτθν ζξοδο, τροποποιθμζνο κατά τον τρόπο που επιςθμάνκθκε και δίχωσ ιςχυρι επανατροφοδότθςθ: ςυνικωσ με κάποια εφρεςθ pattern και αντικατάςταςθ Επεξεργάηεται αρχεία κειμζνου ανά γραμμζσ Τον χρθςιμοποιοφμε όταν θ γνϊςθ για τθν πλθροφορία δεν βρίςκεται τόςο ςτθ δομι του αρχείου (γραμμζσ, ςτιλεσ) όςο ςτο κείμενο του 3

Αρχή Λειτουργίας pattern space = το υφιςτάμενο κείμενο όπωσ επεξεργάηεται (data buffer) while (!EOF) { } διαβάηει μια γραμμι ειςόδου ςτο pattern space εκτελεί μια ςειρά από εντολζσ επεξεργαςίασ επί του pattern space γράφει το pattern space ςτο stdout 4

Σύνταξη εντολής sed <options> <address> <command> address ζνασ αριθμόσ γραμμήσ του κειμζνου ειςόδου ι ζνα pattern που εμπεριζχεται ςε slashes ( /pattern/ ). Κακορίηει ποφ κα εφαρμοςτεί θ εντολι, δθλαδι ςε ποιζσ γραμμζσ Αν δεν ορίηεται, θ sed κα εφαρμοςτεί ςε κάθε γραμμι τθσ ειςόδου Το pattern περιγράφεται με regular expressions, όπωσ ςτθ grep Εάν δοκοφν δυο διευκφνςεισ χωριςμζνεσ με κόμμα, θ εντολι λειτουργεί ςτο πεδίο γραμμϊν μεταξφ τθσ πρϊτθσ και δεφτερθσ διεφκυνςθσ, ςυμπεριλαμβανομζνων των ιδίων! = NOT (εφαρμογι ςτισ διευκφνςεισ εκτόσ αυτϊν που περιγράφτθκαν) 5

Συνήθεις Εντολές Επεξεργασίας 6

Αντικατάσταση Η πλζον ςυνικθσ εντολι: sed s pattern/replacement/<flags> pattern: πρότυπο που αναηθτοφμε replacement: το string που κα αντικαταςτιςει το πρότυπο flags (προαιρετικά): n (number): ποια εμφάνιςθ (π.χ., 1 θ, 2 θ, ) του προτφπου κα αντικαταςτακεί g (global): αντικατάςταςθ όλων (όχι μόνο τθσ πρϊτθσ εμφάνιςθσ) των προτφπων που εμφανίηονται ςτθν τρζχουςα γραμμι p (print): εκτφπωςθ του περιεχομζνου του pattern space 7

Αρχείο προς παραδειγματισμό! # cat -n example.sed 1 This is the first line of an example text. 2 It is a text with erors. 3 Lots of erors. 4 So many erors, all these erors are making me sick. 5 This is a line not containing any errors. 6 This is the last line. 8

Παράδειγμα 1 # sed s/erors/errors/g example.sed This is the first line of an example text. It is a text with errors. Lots of errors. So many errors, all these errors are making me sick. This is a line not containing any errors. This is the last line. Τι κα ςυμβεί αν ςτθν εντολι αντικαταςτιςουμε το g με τον αρικμό 2; Τι αν το απομακρφνουμε εντελϊσ; 9

Παράδειγμα 2 Δφο ειδικά ςφμβολα: ˆ Αρχι γραμμισ $ Τζλοσ γραμμισ # sed s/ˆ/> / example.sed > This is the first line of an example text. > It is a text with erors. > Lots of erors. > So many erors, all these erors are making me sick. > This is a line not containing any errors. > This is the last line. Τι κα ςυμβεί αν ςτθν εντολι αντικαταςτιςουμε το ˆ με $ ; 10

Παράδειγμα 3 #sed -e s/erors/errors/g -e s/last/final/g example.sed (ι, εναλλακτικά) sed s/erors/errors/g; s/last/final/g example.sed This is the first line of an example text. It is a text with errors. Lots of errors. So many errors, all these errors are making me sick. This is a line not containing any errors. This is the final line. 11

Άλλοι ειδικοί χαρακτήρες _ ι, ι οποιοςδιποτε άλλοσ χαρακτιρασ μπορεί να πάρει τθ κζςθ του / για αναγνωςιμότθτα \: escape character &: Αντιςτοιχεί ςτο πρότυπο που ζχει βρεκεί (αναφερόμαςτε πάντα ςτθν τρζχουςα γραμμι) Προςοχι ςτο τι αποτελεί ςφμβολο regular expression και τι όχι 12

Παράδειγμα 4 # sed s/[ˆ ]*/(&)/ example.sed (This) is the first line of an example text. (It) is a text with erors. (Lots) of erors. (So) many erors, all these erors are making me sick. (This) is a line not containing any errors. (This) is the last line. Τι κα ςυνζβαινε αν το pattern ιταν [^a-z]/+/? 13

Παράδειγμα 5 Εκτφπωςθ μόνο των γραμμϊν που υπακοφουν ςτο πρότυπο μετά τθν αλλαγι τουσ κατά τουσ όρουσ τθσ αντικατάςταςθσ που ορίςτθκε: # sed -n s/erors/errors/gp example.sed It is a text with errors. Lots of errors. So many errors, all these errors are making me sick. 14

Εστίαση σε συγκεκριμένες γραμμές Μποροφμε να εςτιάςουμε ςε ςυγκεκριμζνεσ γραμμζσ τισ αλλαγζσ μασ, δθλϊνοντασ τισ γραμμζσ με τον αρικμό τουσ. # sed 1,3 s/erors/errors/g example.sed This is the first line of an example text. It is a text with errors. Lots of errors. So many erors, all these erors are making me sick. This is a line not containing any erors. This is the last line. 15

Εστίαση σε συγκεκριμένες γραμμές Το ίδιο μποροφμε να κάνουμε δίνοντασ ζνα κοινό τουσ pattern # sed /line/s/li/re/ example.sed This was the first rene of an example text. It is a text with errors. Lots of errors. So many errors, all these erors are making me sick. This was a rene not containing any errors. This was the last rene. 16

ιαγραφή sed -e /\/\ * /,/\ * \// s/.\+// -e s/ˆ[ \t]\+// -e /ˆ$/ d file.c 17

sed -- απλά Παραδείγματα Αντικατζςτθςε το "foo" με το "bar" μόνο ςτισ γραμμζσ που περιζχουν το "baz" sed /baz/s/foo/bar/g Σβιςε τα κενά από τθν αρχι και από το τζλοσ κάκε γραμμισ sed s/ˆ* \t]*//;s/[ \t+*$// Πρόςκεςε 5 κενά ςτθν αρχι κάκε γραμμισ sed s/ˆ/ / Σβιςε όλεσ τισ κενζσ γραμμζσ από ζνα αρχείο (όπωσ θ "grep. ") sed /ˆ$/d 18

awk awk: Alfred Aho, Peter Weinberger, and Brian Kernighan Mini γλϊςςα προγραμματιςμοφ ςχεδιαςμζνθ να βρίςκει και να ταιριάηει πρότυπα και να εκτελεί εντολζσ ςε αυτά Perl Μπορεί να ενεργιςει επί των δεδομζνων ειςόδου τθσ με ςφνκετεσ, αναδρομικζσ ςυναρτιςεισ (όπωσ ςτθ C) Επεξεργάηεται αρχεία κειμζνου ανά πεδίο Τθν χρθςιμοποιοφμε περιςςότερο όταν θ γνϊςθ για τθν πλθροφορία βρίςκεται ςτθ δομι του αρχείου (γραμμζσ, ςτιλεσ) Για πιο ςφνκετεσ πράξεισ, όπωσ αναδρομικι εργαςία ςε ςυμβολοςειρζσ ι θ μορφοποίθςθ εξόδου Όταν είναι απαραίτθτεσ ευκολίεσ μιασ υψθλοφ επιπζδου C-like γλϊςςασ, όπωσ πίνακεσ και εντολζσ ελζγχου ροισ 19

Χαρακτηριστικά Σε ςφνταξθ μοιάηει με τθ C Χειρίηεται τθν είςοδο, το διαχωριςμό πεδίων και τθ διαχείριςθ μνιμθσ αυτόματα Περιζχει τφπουσ δεδομζνων για ςυμβολοςειρζσ και αρικμοφσ ςυναρτιςεισ αρίκμθςθσ και ςυμβολοςειρϊν Όχι δθλϊςεισ τφπων μεταβλθτϊν Μεταβλθτζσ και ροι ελζγχου ςτισ ενζργειεσ Βολικόσ τρόποσ πρόςβαςθσ πεδίων μζςα ςε γραμμζσ Ευζλικτθ εκτφπωςθ 20

ομή Ζνα πρόγραμμα awk αποτελείται από: Ζνα προαιρετικό βιμα που εκτελείται πριν το διάβαςμα ειςόδου BEGIN Ζνα ηευγάρι πρότυπο ενζργεια (pattern -- action) επεξεργάηεται τα δεδομζνα ειςόδου εφαρμόηει τθν εντολι action για κάκε matching Ζνα προαιρετικό βιμα που εκτελείται μετά το διάβαςμα ειςόδου END 21

Πεδία και τελεστές Ζνα πρόγραμμα awk μπορεί να είναι ιδιαίτερα πολφπλοκο. Για να τρζξουμε ζνα awk πρόγραμμα μποροφμε να δϊςουμε ζνα ςφντομο program και input files (προαιρετικά, αφοφ τα δεδομζνα μπορεί να ζρχονται από pipe ι redirection) ωσ ορίςματα γραμμισ εντολισ awk program [input_file(s)] Ή ςτθ κζςθ του program να δϊςουμε ζνα αρχείο με τισ εντολζσ που αυτό κα περιζχει: awk -f program_file [input_file(s)] 22

Δομή προτύπων - ενεργειών Κάκε εντολι προγράμματοσ πρζπει να ζχει ζνα πρότυπο ι μια ενζργεια ι και τα δυο Εξ οριςμοφ (προκακοριςμζνο) πρότυπο είναι να ταιριάξει με όλεσ τισ γραμμζσ Εξ οριςμοφ (προκακοριςμζνθ) ενζργεια είναι να εκτυπϊςει τθν υφιςτάμενθ καταγραφι Τα πρότυπα απλά παρατίκενται, ενϊ οι ενζργειεσ εςωκλείονται ςε { } Η awk ανιχνεφει μια ακολουκία γραμμϊν, μια-μια, ψάχνοντασ για γραμμζσ που ταιριάηουν με το πρότυπο 23

Πρότυπα Προςδιοριςμόσ κατά πόςον μια ενζργεια-δράςθ πρόκειται να εκτελεςτεί Μπορεί να είναι: Το ειδικό token BEGIN ι END Κανονικι ζκφραςθ (εςωκλειόμενθ μζςα ςε / /) Σχεςιακζσ ι string αντιςτοιχίεσ εκφράςεων > < >= <= == Το ςφμβολο! δίνει το αντίκετο τθσ αντιςτοιχίασ Συνδυαςμόσ των πιο πάνω χρθςιμοποιϊντασ λογικοφσ τελεςτζσ && ι π.χ. /NYU/ && (name == UNIX Tools ) Pattern1? Pattern2 : Pattern3 If Pattern1 is true, then Pattern2, else Pattern3 24

Ενέργειες-δράσεις Περιλαμβάνει λίςτα από εκφράςεισ όπωσ ςτθ C ++ Increment, -- Decrement ^ Exponentiation +-! Πρόςκεςθ, Αφαίρεςθ, Άρνθςθ * / % Πολλαπλαςιαςμόσ, διαίρεςθ, modulo Εκτελείται για κάκε γραμμι που ταιριάηει το πρότυπο Εάν δεν δοκεί πρότυπο, θ δράςθ εκτελείται για κάκε γραμμι ειςόδου Εάν δεν δοκεί δράςθ, όλεσ οι γραμμζσ που ταιριάηουν με το πρότυπο ςτζλνονται ςτο stdout 25

Εγγραφές (records) Κάκε γραμμι τθσ ειςόδου είναι ζνα record Το υφιςτάμενο record μπορεί να παραπεμφκεί με το ςφμβολο $0 Πεδίο Field Κάκε λζξθ ςε ζνα record ονομάηεται πεδίο (field) Κάκε πεδίο αρικμείται και παραπζμπεται ωσ εξισ: $1 είναι θ πρϊτθ λζξθ, $2 είναι θ δεφτερθ λζξθ κλπ 26

Ειδικές προκαθορισμένες μεταβλητές RS Ο χαρακτιρασ που δρα ωσ ο οριοκζτθσ του record Εξ οριςμοφ είναι το τζλοσ τθσ γραμμισ (newline) Μπορεί να αλλάξει ςτθν BEGIN ενζργεια FS Ο χαρακτιρασ που δρα ωσ ο οριοκζτθσ του πεδίου (field) Εξ οριςμοφ είναι το white space (κενό διάςτθμα, tab κλπ) Μπορεί να ξανα-οριςκεί με τθν F επιλογι» awk Fc : ρυκμίηει το FS με τον χαρακτιρα c Μπορεί να αλλάξει και ςτθν BEGIN ενζργεια NF Αρικμόσ πεδίων ςτο υφιςτάμενο record NR Συνολικόσ αρικμόσ records που ζχουν διαβαςτεί μζχρι ςτιγμισ OFS Output Field Separator Εξ οριςμοφ είναι το μονό κενό διάςτθμα ORS Output Record Separator 27

Παράδειγμα 1 Εκτφπωςε όλθ τθν είςοδο τυπϊνοντασ πριν ζνα START και μετά ζνα STOP awk BEGIN,print "START"- {print $0} END {print "STOP"} foo.txt Εκτφπωςζ μου τα ονόματα των αρχείων ςτον τρζχοντα κατάλογο και τουσ χριςτεσ τουσ ls -l awk BEGIN { print "File\tOwner" } { print $8, "\t", $3} END { print "done"} Προςζξτε τα μονά ειςαγωγικά (a.k.a. αυτάκια)! Αν τα ξεχάςετε, το πρόγραμμα ςασ δεν κα τρζξει! 28

Παράδειγμα 2 bash-3.1# cat example.awk Line number 1 Line number 2 Line number 3 Line number 4 bash-3.1# awk BEGIN {print "Hello you"} /2/ {print $0} END,print "goodbye"- example.awk Hello you Line number 2 goodbye 29

Παράδειγμα 3 Εκτφπωςε τισ γραμμζσ των οποίων τα πεδία είναι > 3 και καλφπτουν το πρότυπο /file/ αλλιϊσ εκτφπωςε τισ γραμμζσ των οποίων τα πεδία είναι 3 και ξεκινοφν με το and Just a text file. Nothing to see here. Some lines have more fields than others and some ( <- blank line) are blank. bash-3.1# awk NF>3? /file/ : /ˆand/ {print $0} example2.awk Just a text file. Nothing to see here. and some 30

Παράδειγμα 4 Εκτφπωςε όλα τα αρχεία μθ μθδενικοφ μεγζκουσ με κατάλθξθ.txt bash-3.1# ls -l awk BEGIN {print "List of all.txt files"} /.txt$/ && $5>0 {print "line number:" NR, "file", $9, "of size:", $5} END {print "OK!!"} List of all.txt files line number:9 file file+1.txt of size: 10 line number:12 file output.txt of size: 4898 line number:13 file processes.txt of size: 12953 line number:16 file test-cut.txt of size: 55 line number:19 file test-sort.txt of size: 124 line number:20 file test-tr.txt of size: 40 OK!! 31

awk -- απλά Παραδείγματα (1) Τφπωςε τισ δφο πρϊτεσ ςτιλεσ (default FS=" ") με αντίςτροφθ ςειρά awk, print $2, $1 - file Τφπωςε τθ ςτιλθ 3 αν θ ςτιλθ 1 είναι μεγαλφτερθ από τθ ςτιλθ 2 awk $1 > $2,print $3- file Τφπωςε τθ γραμμι εμφάνιςθσ, τον αρικμό των ςτθλϊν και τθ ςτιλθ 1 κάκε γραμμισ awk,print NR, NF, $1- file Εκτφπωςε το 2 ο πεδίο ςε ζνα αρχείο όπου τα πεδία είναι χωριςμζνα με? awk F?,print $2- file Τφπωςε το αρχείο file αφοφ διαγράψεισ τθ 2θ ςτιλθ του awk,$2 = ""; print- file 32

Μεταβλητές Η awk μπορεί να ορίςει και να χρθςιμοποιιςει μεταβλθτζσ BEGIN { sum = 0 } { sum ++ } END { print sum } Οι μεταβλθτζσ αυτζσ μποροφν να πάρουν αρικμθτικι (ακζραια ι πραγματικι) τιμι ι ςυμβολοςειρά ΔΕΝ ΔΗΛΩΝΟΝΤΑΙ Εξ οριςμοφ, οι μεταβλθτζσ που ορίηουμε αρχικοποιοφνται με τθν αρικμθτικι τιμι 0 ( ->null string) 33

awk -- απλά Παραδείγματα (2) Τφπωςε όλεσ τισ γραμμζσ που διαφζρουν ανά δφο ςτθν πρϊτθ ςτιλθ awk $1!= prev, print; prev = $1 - file Τφπωςε μόνο τθν τελευταία γραμμι awk,line = $0- END,print line- 34

awk - μεταβλητές, ροή ελέγχου Λειτουργίεσ με μεταβλητζσ: Βρεσ το άκροιςμα και τον μζςο όρο των αρικμϊν τθσ 1θσ ςτιλθσ awk, s += $1 - END,print "sum is", s, " average is", s/nr- Ροή ελζγχου: for loop Τφπωςε όλεσ τισ ςτιλεσ με αντίκετθ ςειρά awk, for (i = NF; i > 0; --i) print $i - file Ροή ελζγχου: if-else Τφπωςε όλεσ τισ μθ κενζσ γραμμζσ των οποίων οι δυο πρϊτεσ ςτιλεσ είναι ίςεσ awk NF > 0, if($1 == $2) print $0- file 35

Μορφοποίηση εξόδου και συνδυασμοί Μορφοποίηςη με printf Τφπωςε και ςτοίχιςε όλα τα αρχεία < 1000 bytes και τα μεγζκθ τουσ ls -l awk, if ($5<1000) printf("file: %10s - Size %5d\n", $9, $5)- Συνδυαςτικό παράδειγμα Πρόςκεςε τουσ αρικμοφσ από τισ πρϊτεσ 10 γραμμζσ του file awk { } while(counter <= 10) { } for(i=1; i<=nf; i++) {sum += $i;} counter++; END {printf("sum of first 10 lines: %3d\n", sum)} file 36