330 likes | 445 Views
AWK. Μία εξαιρετικά δυναμική συμβολική γλώσσα προγραμματισμού και ταυτόχρονα ένα εργαλείο διαχείρισης δεδομένων. Αναζητά, τροποποιεί αρχεία, δημιουργεί reports ...
E N D
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. • Αναφορά στα πεδία τόσο των awkpatterns όσο και των awk προγραμμάτων γίνεται με το σύμβολο του $ ακολουθούμενο από τον αριθμό του πεδίου ($1, $2 κλπ). • Δεν υπάρχει περίπτωση σύγχυσης του συμβολισμού των πεδίων με αυτόν των παραμέτρων θέσης στα scripts επειδή τα πρώτα περικλείονται σε μονά εισαγωγικά ‘ ’.
Η γλώσσα awk - Παραδείγματα $ ls –l > newfiles • $ awk ‘$3 == “adm” {print}’ newfiles Ελεγχος του 3ου πεδίου κάθε γραμμής του αρχείου newfiles για το αν είναι ίσο με το pattern «adm”. Αν ναι, τότε τυπώνεται ολόκληρη η γραμμή που βρέθηκε το pattern. • $ awk ‘$3 ~ “adm” {print}’ newfiles Ελεγχος του 3ου πεδίου κάθε γραμμής του αρχείου newfiles για το αν είναι περίπου ίσο με το pattern «adm”, δηλαδή, αν το 3ο πεδίο περιλαμβάνει το pattern “adm”. Αν ναι, τότε τυπώνεται ολόκληρη η γραμμή που βρέθηκε το pattern.
Η γλώσσα awk - Παραδείγματα • $ awk ‘$3 ~ “adm” {print $9, $5}’ newfiles Ελεγχος του 3ου πεδίου κάθε γραμμής του αρχείου newfiles για το αν είναι περίπου ίσο με το pattern “adm”, δηλαδή, αν το 3ο πεδίο περιλαμβάνει το pattern “adm”. Αν ναι, τότε τυπώνεται το 9ο και το 5ο πεδίο και όχι ολόκληρη η γραμμή που βρέθηκε το pattern. • $ awk ‘$3 != “root” {print}’ newfiles Ελεγχος του 3ου πεδίου κάθε γραμμής του αρχείου newfiles για το αν δεν είναι ίσο με το pattern “root”. Ετσι, τυπώνονται όλες οι γραμμές που δε βρέθηκε το pattern“root”.
Η γλώσσα awk - Παραδείγματα • $ awk –F: ‘$1 == “root” {print}’ /etc/passwd • Ελεγχος του 1ου πεδίου κάθε γραμμής του αρχείου passwd που έχει field separator το χαρακτήρα ‘:’, για το αν είναι ίσο με το pattern “root”, δηλαδή, αν το 1ο πεδίο περιλαμβάνει το pattern “root”. Αν ναι, τότε τυπώνεται ολόκληρη η γραμμή που βρέθηκε το pattern. • $ awk –F: ‘$4 == 0 {print}’ /etc/passwd • Ελεγχος του 4ου πεδίου κάθε γραμμής του αρχείου passwd για το αν είναι ίσο με το ‘0’, δηλαδή, αν ο user ανήκει στο group που ανήκει και ο root. Ετσι, τυπώνονται όλες οι γραμμές των users που ανήκουν στο ίδιο group με το root.
Η γλώσσα awk - Παραδείγματα • $ awk –F: ‘$4<14 {print}’ /etc/passwd • Ελεγχος του 4ου πεδίου κάθε γραμμής του αρχείου passwd που έχει field separator το χαρακτήρα ‘:’, για το αν είναι μικρότερο από την τιμή 14. Ετσι, τυπώνονται όλες οι γραμμές εκείνων των users που ανήκουν στα group 0-13. • $ awk –F: ‘$4 <=14 {print}’ /etc/passwd • Ελεγχος του 4ου πεδίου κάθε γραμμής του αρχείου passwd για το αν είναι μικρότερο ή ίσο από το ‘14’. Ετσι, τυπώνονται όλες οι γραμμές εκείνων των users που ανήκουν στα group 0-14.
Η γλώσσα awk - Παραδείγματα • $ awk –F: ‘$4!=14 {print}’ /etc/passwd • Ελεγχος του 4ου πεδίου κάθε γραμμής του αρχείου passwd που έχει field separator το χαρακτήρα ‘:’, για το αν δεν είναι ίσο με την τιμή 14. Ετσι, τυπώνονται όλες οι γραμμές εκείνων των users που ανήκουν σε οποιοδήποτε άλλο group εκτός από το 14. • $ awk –F: ‘$4 >=14 {print}’ /etc/passwd • Ελεγχος του 4ου πεδίου κάθε γραμμής του αρχείου passwd για το αν είναι μεγαλύτερο ή ίσο από το ‘14’. Ετσι, τυπώνονται όλες οι γραμμές εκείνων των users που ανήκουν στα group 14-.
Η γλώσσα awk - Παραδείγματα • $ awk –F: ‘$4>14 {print}’ /etc/passwd Ελεγχος του 4ου πεδίου κάθε γραμμής του αρχείου passwd που έχει field separator το χαρακτήρα ‘:’, για το αν είναι μεγαλύτερο από την τιμή 14. Ετσι, τυπώνονται όλες οι γραμμές εκείνων των users που ανήκουν στα group 14-.
Η γλώσσα awk στον προγραμματισμό στο Shell • $ who | awk ‘{print $2}’ Εμφανίζεται λίστα με τα τερματικά μόνο που είναι ενεργά στο σύστημα και αφού το όνομα τους βρίσκεται στο δεύτερο πεδίο μιας λίστας της εντολής who.
Η γλώσσα awk - Παραδείγματα • $ cat > awkprg1 • /widget/ {print} • ^C • $ awk –f awkprg1 • $ cat > awkprg2 • /widget/ {w_count=w_count+1} • ^C • $ awk –f awkprg2 • $ nawk ‘/widget/ {print}’ inventory • $ cat > phones • Judy Seattle 206-333-4321 • Fran Middletown 908-671-4321 • Judy Rumson 908-741-1234 • Ron Ithaca 607-273-1234 • ^C • $ nawk ‘/908-/ {print $1}’ phones
Η γλώσσα awk - Παραδείγματα • $ nawk ‘{print $1}’ phones • $ nawk –F, ‘/Judy/ {print}’ phones • $ nawk –F”\t” ‘/Judy/ {print}’ phones • $ nawk ‘length($2) > 6’ phones • $ nawk ‘{print $1}’ phones > namelist • $ nawk ‘{print $1}’ phones1 phones2 • $ nawk –f progfile input_file
Η γλώσσα awk - Παραδείγματα • $ 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 - Patterns • Κανονικές εκφράσεις(Regular expressions) • Σειρές γραμμάτων, αριθμών και ειδικών χαρακτήρων που καθορίζουν το string που αναζητάται. • Pattern σύγκρισης (Comparison patterns) • Patterns με τα οποία γίνεται σύγκριση δύο στοιχείων με χρήση τελεστών όπως =, <, > καθώς και τελεστών σύγκρισης για strings. Χρησιμοποιούνται για σύγκριση αριθμών και strings. • Σύνθετα patterns (Compound patterns) • Δημιουργούνται από άλλα patterns με χρήση των λογικών τελεστών and (&&), or (||) και not (!). Χρησιμοποιούνται για σύγκριση αριθμών και strings και συνδυασμού αριθμών με strings.
Η γλώσσα awk - Patterns • Pattern περιοχής-ζώνης (Range patterns) • Χρησιμοποιούνται για αναζήτηση γραμμών μεταξύ μιας εμφάνισης ενός pattern και μιας εμφάνισης ενός δεύτερου pattern. • BEGIN και 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 108 .11 .15 • markers 50 .45 .75 • memos 24 .53 .75 • notebooks 15 .75 1.00 • erasers 200 .12 .15 • books 10 1.00 1.50 • /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 “Name Onhand Cost Price”} (θέτει το 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)
Η γλώσσα awk – Ενέργειες με Πεδία και Αριθμούς Πεδίων • Τα πεδία (field identifiers) και οι αριθμοί των πεδίων (field numbers) αποτελούν ένα ειδικό είδος ενσωματωμένων μεταβλητών. • Μπορεί να τους εκχωρηθεί τιμή, να τροποποιηθεί η τιμή τους και να συγκριθούν με άλλες μεταβλητές αριθμητικές ή strings. • Με αυτό τον τρόπο μπορούν να δημιουργηθούν νέα πεδία, να διαγραφεί κάποιο πεδίο, ή να αλλάξει η σειρά δύο ή περισσότερων πεδίων ενός αρχείου. • Παράδειγμα:pencils 108 .11 .15 • {$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 108 .11 .15Empireγίνεται • pencils 108 .11 .15Empire001) • Συναρτήσεις για μεταβλητές 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] • Ελεγχος ύπαρξης ενός στοιχείου σε ένα πίνακα: • subscriptin 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 (condition) action<l> • Παράδειγμα: • /pencil*/ {pencils += $2} • END {if(pencils < 144) print “Must order more pencils”} • Η δομή if – thenσε μια γραμμή: • expression1 ? expression2 : expression3 • Παράδειγμα: • $1 > 50000 ? ++high : ++low • Η δομή while: • while(condition) { • action • } • Παράδειγμα: Smith 546 235 100 230 • { sum=0Major 340 120 • I=2Minor 459 104 780 • while (I<=NF) { • sum += $I • i++} • average=sum/(NF-1) • print “The average for “ $1 “ is “ average }
Η γλώσσα awk – Δομές Ελέγχου • Η δομή do-while: • doactionwhile(condition) • Η δομή 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: • Προκαλεί την έξοδο από τον πιο άμεσο (εσωτερικότερο) βρόχο. • Η εντολή 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 expr1, expr2, … • BEGIN { OFS=“\t” } {print $1, $4} • Η εντολή printf