Προγραμματισμός με gawk μέρος 1ο: Τα πρώτα βήματα
Description: This is issue 23 of Magaz, the Hellenic LinuxMagazine
Keywords: magaz hellenic greek hellas greece hellug linux magazine

Magaz, The Greek Linux Magazine
Τεύχος #23
Περιληπτικά Περιεχόμενα Αναλυτικά Περιεχόμενα Mirrors Links Πληροφορίες Συντάκτες Αναζήτηση Επικοινωνία
Επόμενο Προηγούμενο Περιεχόμενα ### 2. Τα πρώτα βήματα ### 2.1 Οι βασικές αρχές Για να χρησιμοποιήσετε την gawk, θα πρέπει να γράψετε ένα πρόγραμμα. Το πρόγραμμα αυτό θα το ονομάζουμε awk script. Το λέω αυτό, γιατί σε απλές εφαρμογές θα παρατηρήσετε πως θα μπορούσατε αντί για την gawk να χρησιμοποιήσετε το grep. Στο grep, όμως, δεν γράφετε πρόγραμμα (script), αλλά του δίνετε παραμέτρους. Φυσικά, το awk script δεν έχει περιορισμούς στο μέγεθος. Μπορείτε να το κάνετε όσο μεγάλο θέλετε. To πρόγραμμα που φτιάχνετε μπορεί να "διαβαστεί" από την gawk με πολλούς τρόπους, από τους οποίους οι πιό συνηθισμένοι είναι η από την γραμμή εντολών ή από ένα αρχείο. Η gawk μπορεί επίσης να δεχθεί input με pipe (διασωλήνωση) από άλλο πρόγραμμα ή ακόμα και από το ίδιο το πληκτρολόγιο (επί τόπου). Το output με τη σειρά του, μπορεί εκτός από το standard, να ανακατεθυνθεί σε ένα αρχείο ή να διασωληνωθεί σε ένα άλλο πρόγραμμα. ### 2.2 Σύνταξη
    gawk -Fx 'πρόγραμμα' [αρχείο/α]
    gawk -Fx -f αρχείο_εντολών [αρχείο/α]
Το πρόγραμμα είναι μία σειρά από εντολές της awk, ενώ αρχείο_εντολών είναι ένα αρχείο που περιέχει εντολές της awk. To αρχείο/α (στο τέλος της σύνταξης) είναι το όνομα του αρχείου στο οποίο θα γίνει η επεξεργασία που θέλουμε. Αν παραλείψουμε εκεί το αρχείο, τότε η gawk δέχεται input από την καθιερωμένη μονάδα εισόδου (πληκτρολόγιο). Κάθε εντολή της awk έχει την μορφή: πρότυπο {πράξη} Η awk "σαρώνει" γραμμή προς γραμμή το αρχείο και κάθε γραμμή συγκρίνεται με το πρότυπο. Αν ταιριάζει, τότε εκτελείται η αντίστοιχη πράξη. Αν από την παραπάνω μορφή απουσιάζει το πρότυπο, τότε η πράξη εκτελείται για κάθε γραμμή, ενώ αν απουσιάζει η πράξη, τότε όλες οι γραμμές που ταιριάζουν με το πρότυπο εμφανίζονται στην οθόνη. Την χρησιμότητα της επιλογής -Fx θα την δούμε παρακάτω. ### 2.3 Απλά Παραδείγματα Ο απλούστερος τρόπος να χρησιμοποιήσετε την awk είναι να γράψετε το πρόγραμμα στην γραμμή εντολών. Ας δούμε ένα απλό παράδειγμα:
    $ cat arxeio.txt | gawk '{print NF ": " $0}'
    2: Γεια σας
    8: Σήμερα θα μάθουμε να προγραμματίζουμε με την gawk
    4: Σας εύχομαι καλή επιτυχία!
Για να δούμε τώρα τί κάνει το πρόγραμμα. Το αποτέλεσμα της εντολής cat arxeio.txt περνά σαν είσοδος στην gawk. Πρότυπο δεν έχουμε, επομένως η πράξη (μέσα στις αγκύλες) εφαρμόζεται για κάθε γραμμή (του arxeio.txt). Από εκεί και πέρα η gawk εμφανίζει στην οθόνη των αριθμό των λέξεων, την άνω και κάτω τελεία, το κενό και μετά τα περιεχόμενα (ανά γραμμή) του arxeio.txt. To NF είναι μια προκαθορισμένη μεταβλητή της gawk, η οποία παριστάνει των αριθμό των πεδίων σε κάθε εγγραφή. Από default το κάθε πεδίο ξεχωρίζει από το άλλο με κενό (space) ή με tab, ενώ κάθε εγγραφή ξεχωρίζει με τον χαρακτήρα αλλαγής γραμμής. Επομένως, ας πώ τί κάνει η NF με πιο απλά λόγια: παριστάνει τον αριθμό λέξεων σε κάθε γραμμή. Όντως, στην πρώτη γραμμή η λέξεις ήταν 2 κλπ. Το σύμβολο $0 παριστάνει ολόκληρη την εγγραφή, ενώ υπάρχουν τα σύμβολα $1, $2 κ.ο.κ. για τα πεδία. Για παράδειγμα, στην πρώτη γραμμή, το $1 παριστάνει το πεδίο "Γεια", ενώ το $2 το "σας". Στην δεύτερη γραμμή το $5 είναι το "προγραμματίζουμε". Θα μπορούσατε να χρησιμοποιήσετε την ανακατεύθυνση του UNIX, ή απλά το όνομα του αρχείου για να καταλήξετε στο ίδιο αποτέλεσμα με την παραπάνω εντολή. Δείτε άλλες δύο ισοδύναμες (με την παραπάνω) εντολές:
    $ gawk '{print NF ": " $0}' < arxeio.txt
    $ gawk '{print NF ": " $0}' arxeio.txt
### 2.4 Awk Scripts Ας δούμε πάλι το παραπάνω παράδειγμα, την εντολή gawk '{print NF ": " $0}' arxeio.txt. Θα μπορούσατε να απόφυγετε την πληκτρολόγηση της εντολής στην γραμμή εντολών, αλλά να την συμπεριλάβετε σε ένα awk script. Προσέξτε πως στο awk script δεν πρέπει να γράψετε τα απλά εισαγωγικά, αφού αυτά χρησιμεύουν για να μην ασχοληθεί ο φλοιός (shell) με το περιεχόμενό τους. Αν τα χρησιμοποιήσετε η gawk θα σας βγάλει ένα μήνυμα λάθους και, φυσικά, δεν θα έχετε το επιθυμητό αποτέλεσμα. Οπότε, θα δημιουργήσετε ένα αρχείο script.awk που θα περιέχει τα εξής:
    {print NF ": " $0}
Στη συνέχεια, θα τρέξετε το πρόγραμμα με την εξής εντολή:
    gawk -f script.awk arxeio.txt
Να αναφέρω επίσης, πως η gawk και άλλες εκδόσεις της awk, οι οποίες συμβαδίζουν με το POSIX πρότυπο (standard) σας επιτρέπουν να χρησιμοποιήσετε περισσότερα του ενός scripts μετά την επιλογή -f (π.χ. gawk -f script1 script2 script3 arxeio.txt). Θα σας συμβούλευα να προτιμήσετε να καλέσετε ένα μόνο script (και όχι πιο πολλά) για να αποφύγετε διάφορα λάθη ή ενέργειες που μπορεί να σας μπερδέψουν. Επόμενο Προηγούμενο Περιεχόμενα