1 / 50

Εργαστήριο Λειτουργικών Συστημάτων Μάθημα 6oυ Εξαμήνου, Τομέας Λογικού και Υπολογιστών

Εργαστήριο Λειτουργικών Συστημάτων Μάθημα 6oυ Εξαμήνου, Τομέας Λογικού και Υπολογιστών . Δρ. Α. Κομνηνός akomninos@ceid.upatras.gr. Σύνοψη 4 ης ∆ιάλεξης . Επεξεργαστής Ροών Κειμένου -- sed Γλώσσα ∆ιαχείρισης Κειμένων -- awk Σύνοψη Μαθήματος Σύνοψη Μαθήματος

calix
Download Presentation

Εργαστήριο Λειτουργικών Συστημάτων Μάθημα 6oυ Εξαμήνου, Τομέας Λογικού και Υπολογιστών

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Εργαστήριο Λειτουργικών Συστημάτων Μάθημα 6oυ Εξαμήνου, Τομέας Λογικού και Υπολογιστών Δρ. Α. Κομνηνός akomninos@ceid.upatras.gr

  2. Σύνοψη 4ης ∆ιάλεξης • Επεξεργαστής Ροών Κειμένου -- sed • Γλώσσα ∆ιαχείρισης Κειμένων -- awk • Σύνοψη Μαθήματος • Σύνοψη Μαθήματος • Επόμενη ∆ιάλεξη

  3. Γενικά • Το κέλυφος (shell) προσφέρει ένα εναλλακτικό περιβάλλον από την κονσόλα • Επιτρέπει τον συνδυασμό εντολών με την χρήση script • Προσφέρει εναλλακτικούς τρόπους για την επίτευξη σύνθετων ενεργειών • Επιτρέπει αποθήκευση μεταβλητών • Υπάρχουν πολλά διαφορετικά κελύφη korn, tcsh, zsh . . . Κάθε χειριστής έχει ένα προεπιλεγμένο κέλυφος • Η επιλογή διατηρείται στο αρχείο /etc/passwd ichatz:x:1000:1000:,,,:/home/ichatz:/bin/bash • Η εντολή chsh αλλάζει το κέλυφος • Προσφέρει αρχεία ρυθμίσεων διαφορετικά για κάθε λογαριασμό

  4. Προώθηση Εισόδου / Εξόδου • Οι εντολές παράγουν έξοδο – χρησιμοποιούμε το επίθεμα > για την προώθηση σε κάποιο αρχείο# ls > filelist • Θα δημιουργηθεί ένα νέο αρχείο με όνομα filelist • Αν υπάρχει ήδη, το νέο αρχείο θα αντικαταστήσει το παλιό • Χρησιμοποιούμε το επίθεμα >> για την προώθηση σε κάποιο υπάρχον αρχείο • # ls -lt /root/doc >> /root/filelist • Οι εντολές απαιτούν είσοδο – χρησιμοποιούμε το επίθεμα < για την προώθηση ενός αρχείου ως είσοδο # sort < /root/filelist • Για να προωθήσουμε την έξοδο μιας εντολής στην είσοδο μιας άλλης – χρησιμοποιούμε το επίθεμα | # who | sort --ταξινόμηση καταλόγου χειριστών # ls /root | grep rc | wc –l --καταμέτρηση αρχείων ’rc’

  5. ∆ιεργασίες • Μπορούμε να εκτελέσουμε εντολές σειριακά διαχωρίζοντας τις εντολές με ; • Εκτελούνται όλες οι εντολές και όταν ολοκληρωθεί και η τελευταία, προσφέρεται νέο prompt # who | sort ; date • Μπορούμε να εκτελέσουμε εντολές παράλληλα διαχωρίζοντας τις εντολές με & • Εκτελούνται όλες οι εντολές και προσφέρεται άμεσα νέο prompt # pr junk | lpr & • Η εκτέλεση μια εντολής ειναι μια διεργασία • Η εντολή ps εμφανίζει τις τρέχουσες διεργασίες • Η εντολή wait περιμένει μέχρι να ολοκληρωθούν όλες οι εντολές που εκτελέστηκαν με &

  6. Κατάλογος διεργασιών # ps–a PID TTY TIME CMD 106 c1 0:01 -sh 4114 co 0:00 /bin/sh /usr/bin/packman 2114 co 0:00 -sh c1 0:00 ps –a 87 c2 0:00 getty 90 c3 0:00 getty • Παράμετρος a -- εμφάνιση διεργασιών που δημιουργήθηκαν από κονσόλεςΣτήλη PID -- μοναδική ταυτότητα διεργασίαςΣτήλη TTY -- κονσόλα που δημιούργησε την διεργασία • Στήλη TIME -- συνολικός χρόνος εκτέλεσης • Στήλη CMD -- εντολή που εκτελέστηκε

  7. Εργαλεία διαχείρισης διεργασιών • Τερματισμός διεργασίας – εντολή kill [PID] • Μπορούμε να εκτελέσουμε μια εντολή με διαφορετική προτεραιότητα • πρόθεμα nice# nice pr junk | lpr & • Μπορούμε να καθυστερήσουμε την εκτέλεση μιας εντολής • πρόθεμα at # at 1500 ls-l / /root /dir | wc > allfiles prallfiles | lpr ; date > lpr-endtime & date > lpr-starttime ˆD at: /usr/spool/at/07.111.1500.67 created #

  8. Μεταβλητές Περιβάλλοντος • Μπορούμε να χρησιμοποιούμε τις μεταβλητές από την γραμμή εντολών • Χρησιμοποιούμε τον τελεστή $ bash-3.00# myvar="hello"; echo $myvar hello bash-3.00# myvar="ls -la" bash-3.00# $myvar drwxr-xr-x 2 ako2 staff 68 16 Jan 13:44 Applications drwx------ 33 ako2 staff 1122 29 Mar 12:32 Desktop drwx------ 21 ako2 staff 714 20 Mar 11:55 Documents bash-3.00#

  9. Χειρισμός Μεταβλητών • Οι εντολές env, printenv εμφανίζουν την λίστα με τις ΚΑΘΟΛΙΚΕΣ μεταβλητές • Η εντολή set εμφανίζει την λίστα με τις ΤΟΠΙΚΕΣ μεταβλητές • Για να ορίσουμε μια ΚΑΘΟΛΙΚΗ μεταβλητή χρησιμοποιούμε την εντολή export • ∆ήλωση μεταβλητών σύμφωνα με το περιεχόμενο • String variables -- myvar = "value» • Integer variables -- declare -i myvar • Constant variables -- readonly me="ichatz" • Array variables -- declare -a MYARRAY MYARRAY[0]="one"; MYARRAY[1]=5; echo ${MYARRAY[*]} • Τα ονόματα των μεταβλητών είναι case-sensitive • Η εντολή unset διαγράφει μια μεταβλητή

  10. Τοπικές – Καθολικές Μεταβλητές • Για να ορίσουμε μια ΚΑΘΟΛΙΚΗ μεταβλητή χρησιμοποιούμε την εντολή export 1o shell 2o shell Κλείνω 2οshell 2o shell

  11. Κέλυφος και κείμενο • Το κέλυφος είναι ένα περιβάλλον προγραμματισμού: μπορούμε να γράψουμε τα δικά μας προγράμματα (shell scripts) σαν μια γραμμή στη γραμμή εντολών ή σαν αυτόνομα αρχεία script.sh • που δηλώνουν και χειρίζονται μεταβλητές $var • που δέχονται εντολές ροής ελέγχου (if-else, for, break . . . ) • που δέγονται ορίσματα ($1 , $2)που κάνουν αριθμητικές πράξεις (expr $tmp = $tmp + 1) • που χρησιμοποιούν δυνατότητες του κελύφους (pipes, I/O redirection) • Στο Unix τα πάντα είναι ένα αρχείο - θέλουμε να μπορούμε να χειριστούμε απλά κείμενο, ειδικά την έξοδο εντολών • Οι ουσιαστικές πληροφορίες διαχείρισης του συστήματος καταγράφονται σε κείμενο : /proc, /etc , /etc/rc.d , /usr/src . . .

  12. ∆ημιουργία Νέων Εντολών • Μπορούμε να δημιουργήσουμε νέες εντολές • Σε ένα αρχείο κειμένου εισάγουμε τις εντολές • Εκτελούμε την νέα εντολή με την χρήση του sh • Ορίζουμε πρόσβαση εκτέλεσης στο αρχείο και το ‘καλούμε’ απευθείας • Μπορούμε να περάσουμε παραμέτρους σε ένα script • Ονομάζονται command-line arguments • Χρησιμοποιούμε τις παραμέτρους σαν μεταβλητές • ∆υνατότητα μαθηματικών εκφράσεων με ακέραιους

  13. Σύνδεση με τα προηγούμενα • Από που αντλείται η δύναμη του προγραμματισμού SHELL ? • Στο Unix όλα είναι ένα αρχείο → output redirection είναι βασικά εγγραφή/ανάγνωση κατάλληλων file descriptors. • Το περιβάλλον του κελύφους έχει λογική όπως οι γλώσσες προγραμματισμού: for, foreach, if-else, switch, variables, evaluation ... • Υπάρχουν άπειρες μικρές εντολές των οποιών τα αποτελέσματα, χρήσει των παραπάνω, μπορούν να συνδυαστούν:fingerBob| grepLogin|awk’{print$2":"$4""$5}’|lp • ∆ιαχείριση κειμένου δίνει επιπλέον δύναμη: sed και awk.

  14. Γενικά για τον sed • sed: Stream Editor: • Είσοδος από αρχείο ή pipe - έξοδος αντίστοιχα • Φιλτράρει και επεξεργάζεται το κείμενο εισόδου και το δίνει στην έξοδο, τροποιημένο κατά τον τρόπο που επισημάνθηκε και δίχως ισχυρή επανατροφοδότηση: συνήθως με κάποια εύρεση pattern και αντικατάσταση. • Επεξεργάζεται αρχεία κειμένου ανά γραμμές • Τον χρησιμοποιούμε όταν η γνώση για την πληροφορία δεν βρίσκεται τόσο στη δομή του αρχείου (γραμμές, στήλες) όσο στο κείμενο του

  15. Αρχές Λειτουργίας • pattern space = το υφιστάμενο κείμενο όπως επεξεργάζεται (data buffer) • while (readline) { • διαβάζει μια γραμμή εισόδου από το προκαθορισμένο ρεύμα εισόδου ή από αρχείο, μια-μια κάθε φορά, στο χώρο προτύπων • σε κάθε γραμμή, ο sed εκτελεί μια σειρά από εντολές επεξεργασίας (που έχουν γραφτεί από το χρήστη) επί του pattern space • γράφει το χώρο προτύπων στο ρεύμα εξόδου }

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

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

  18. Αντικατάσταση • Η πλέον συνήθης εντολή: • sed s ’pattern/replacement/<flags>’ • pattern: πρότυπο που αναζητούμε • replacement: το string που θα αντικαταστήσει το πρότυπο • flags (προεραιτικά): • n (number): ποια τον αριθμό εμφάνιση του προτύπου θα αντικατασταθεί • g (global): αντικατάσταση όλων (όχι μόνο της πρώτης εμφάνισης) των προτύπων που εμφανίζονται στην τρέχουσα γραμμή • p (print): εκτύπωση του περιεχομένου του pattern space

  19. Αρχείο προς παραδειγματισμό! • bash-3.1#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.

  20. Παραδείγμα 1 • bash-3.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; Τιαντο απομακρύνουμεεντελώς;

  21. Παραδείγμα 2 ˆ Αρχή γραμμής - $ Τέλοςγραμμής bash-3.1# 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. Τιθα συμβεί ανστηνεντολή αντικαταστήσουμετο ˆ με $ ;

  22. Παραδείγμα 3 • bash-3.1# 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.

  23. ́Αλλοι ειδικοί χαρακτήρες • _ ή (κόμμα) Μπορούν να πάρουν τη θέση του / για αναγνωσιμότητα • \: escape character • & Αντιστοιχεί στο πρότυπο που έχει βρεθεί (αναφερόμαστε πάντα στην τρέχουσα γραμμή) • Προσοχή στο τι αποτελεί σύμβολο regular expression και τι όχι

  24. Παραδείγμα 4 • bash-3.1# 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]/+/?

  25. Παραδείγμα 5 • Εκτύπωση μόνο των γραμμών που υπακουούν στο πρότυπο μετά την αλλαγή τους κατά τους όρους της αντικατάστασης που ορίστηκε: • bash-3.1#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.

  26. Εστίαση σε συγκεκριμένες γραμμές • Μπορούμενα εστιάσουμεσεσυγκεκριμένεςγραμμέςτις αλλαγές μας, δηλώνονταςτιςγραμμέςμετον αριθμό τους. • bash-3.1# 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.

  27. Εστίαση σε συγκεκριμένες γραμμές • Τοίδιο μπορούμενα κάνουμεδίνονταςένα κοινό τους pattern • bash-3.1# sed’/line/li/re’ example.sed • This was the first reneof 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 renenot containing any errors. • This was the last rene.

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

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

  30. Γενικά για την awk • awk: Alfred Aho, Peter Weinberger, and Brian Kernighan • mini Γλώσσα προγραμματισμού σχεδιασμένη να βρίσκει και να ταιριάζει πρότυπα και να εκτελεί εντολές σε αυτά → Perl • Μπορεί να επενεργήσει επί των δεδομένων εισόδου της με σύνθετες, αναδρομικές συναρτήσεις (όπως στη C) • Επεξεργάζεται αρχεία κειμένου ανά πεδία • Τον χρησιμοποιούμε περισσότερο όταν η γνώση για την πληροφορία βρίσκεται στη δομή του αρχείου (γραμμές, στήλες) • Για πιο σύνθετες πράξεις, όπως αναδρομική εργασία σε συμβολοσειρές ή η μορφοποίηση εξόδου • ́Οταν είναι απαραίτητες ευκολίες μιας υψηλού επιπέδου C-like γλώσσας, όπως πίνακες και εντολές ελέγχου ροής

  31. Χαρακτηριστικά • Σε σύνταξη μοιάζει με τη C • Χειρίζεται την είσοδο, το διαχωρισμό πεδίων και τη διαχείριση μνήμης αυτόματα • Ενσωματωμένοι τύποι δεδομένων για συμβολοσειρές και αριθμούς • ́Οχι δηλώσεις τύπων μεταβλητών • Κατάλληλη αριθμητική επεξεργασία • Μεταβλητές και ροή ελέγχου στις ενέργειες • Βολικός τρόπος πρόσβασης πεδίων μέσα σε γραμμές • Ευέλικτη εκτύπωση • Ενσωματωμένες συναρτήσεις αρίθμησης και συμβολοσειρών

  32. ∆ομή • ́Ενα πρόγραμμα awk αποτελείται από: • ́Ενα προεραιτικό βήμα που εκτελείται πριν το διάβασμα εισόδου BEGIN • ́Ενα ζευγάρι πρότυπο – ενέργεια (pattern -- action) • επεξεργάζεται τα δεδομένα ειδόδου • εφαρμόζει την εντολή action για κάθε matching • ́Ενα προεραιτικό βήμα που εκτελείται μετά το διάβασμα εισόδου END

  33. Πεδία και τελεστές • ́Ενα πρόγραμμα awk μπορεί να είναι ιδιαίτερα πολύπλοκο. • Για να τρέξουμε ένα awk πρόγραμμα μπορούμε να δώσουμε ένα σύντομο program και input files (προεραιτικά, αφού τα δεδομένα μπορεί να έρχονται από pipe ή redirection) ως ορίσματα γραμμής εντολής • awk ’program’ [input_file(s)] • ́Η στη θέση του ’program’ να δώσουμε ένα αρχείο με τις εντολές που αυτό θα περιέχει: • awk -f program_file input_files

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

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

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

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

  38. Ειδικές προκαθορισμένες μεταβλητές • 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

  39. Παραδείγμα 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"} ’ Προσέξτε τα αυτάκια ! Αν τα ξεχάσετε, το πρόγραμμα σας δε θα τρέξει !

  40. Παραδείγμα 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

  41. Παραδείγμα 3 • Εκτύπωσε τις γραμμές των οποίων τα πεδία είναι > 3 και καλύπτουν το πρότυπο /file/ αλλιώς εκτύπωσε τις γραμμές των οποίων τα πεδία είναι ≤ 3 και ξεκινούν με το and bash-3.1#cat example2.awk 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

  42. Παραδείγμα 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!!

  43. 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

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

  45. awk -- απλά παραδείγματα (2) • Τύπωσε όλες τις γραμμές που διαφέρουν ανά δύο στην πρώτη στήλη • awk ’$1 != prev { print; prev = $1 }’ file • Τύπωσε μόνο την τελευταία γραμμή • awk ’{line = $0} END {print line}’

  46. 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

  47. awk - μορφοποίηση εξόδου και συνδυασμοί • Μορφοποίηση με printf • Τύπωσε και στοίχισε όλα τα αρχεία < 1000 bytes και τα μεγέθη τους • ls -l | awk ’ {if($5<1000) printf ("File: %10s - Size %5d\n", $9, $5)}’ ̃ }’ • Συνδυαστικό παράδειγμα • Πρόσθεσε τους αριθμούς από τις πρώτες μισές γραμμές του file awk ’ { while(counter <= NR/2 ){ for(i=1 ; i<=NF; i++) sum += $i counter++ } } END {printf("sum of first %2d lines: %3d\n",counter, sum)}’ file

  48. Σύνοψη Μαθήματος • Περιβάλλον προγραμματισμού UNIX • Ο επεξεργαστής ροών κειμένου sed • Η γλώσσα προγραμματισμού για διαχείριση κειμένων awk

  49. Βιβλιογραφία • Βιβλίο ‘Το περιβάλλον Προγραμματισμού UNIX’’ (B.Kernighan, R.Pike) • Κεφάλαιο 4: Φίλτρα

  50. Επόμενη ∆ιάλεξη • Εισαγωγή στο Λ.Σ. MINIX 3Επανάληψη από μάθημα ‘Λειτουργικά Συστήματα Ι’ Κεφάλαιο 1: Παραδοσιακά Λειτουργικά Συστήματα Κεφάλαιο 2: ∆ιεργασίες • Αντίστοιχα κεφάλαια από ‘Σύγχρονα Λειτουργικά Συστήματα’ (A.Tanenbaum)

More Related