Η εντολή awk είναι μια ισχυρή μέθοδος επεξεργασίας ή ανάλυσης αρχείων κειμένου - συγκεκριμένα, αρχείων δεδομένων που οργανώνονται από γραμμές (γραμμές) και στήλες.
Απλός awk οι εντολές μπορούν να εκτελεστούν από τη γραμμή εντολών. Πιο πολύπλοκες εργασίες θα πρέπει να γράφονται ως προγράμματα awk (λεγόμενα awk scripts) σε ένα αρχείο.
Η βασική μορφή μιας εντολής awk φαίνεται ως εξής:
awk 'μοτίβο {action}' είσοδος-αρχείο '> αρχείο εξόδου
Αυτό σημαίνει: Πάρτε κάθε γραμμή του αρχείου εισόδου? εάν η γραμμή περιέχει το μοτίβο, εφαρμόστε την ενέργεια στη γραμμή και γράψτε τη γραμμή που προκύπτει στο αρχείο εξόδου. Εάν το πρότυπο παραλείπεται, η ενέργεια εφαρμόζεται σε όλες τις γραμμές. Για παράδειγμα: awk '(εκτύπωση $ 5)' table1.txt> output1.txt Αυτή η δήλωση παίρνει το στοιχείο της 5ης στήλης κάθε γραμμής και την γράφει ως γραμμή στο αρχείο εξόδου "output.txt". Η μεταβλητή '$ 4' αναφέρεται στη δεύτερη στήλη. Παρόμοια, μπορείτε να έχετε πρόσβαση στην πρώτη, τη δεύτερη και την τρίτη στήλη, με $ 1, $ 2, $ 3, κλπ. Από προεπιλογή, οι στήλες υποτίθεται ότι χωρίζονται με κενά ή διαστήματα (λεγόμενος λευκός χώρος). Έτσι, αν το αρχείο εισόδου "table1.txt" περιέχει αυτές τις γραμμές: 1, Justin Timberlake, Τίτλος 545, Τιμή $ 7.302, Taylor Swift, Τίτλος 723, Τιμή $ 7.903, Mick Jagger, Τίτλος 610, Τιμή $ 7.904, Lady Gaga, Τίτλος 118, Τιμή $ 7.305, Johnny Cash, Τίτλος 482, Τιμή $ 6.506, Elvis Presley, Τίτλος 335, Τιμή $ 7.307, John Lennon, Τίτλος 271, Τιμή $ 7.908, Μάικλ Τζάκσον, Τίτλος 373, Τιμή $ 5,50 Στη συνέχεια, η εντολή θα γράψει τις ακόλουθες γραμμές στο αρχείο εξόδου "output1.txt": 545,723,610,118,482,335,271,373, Εάν ο διαχωριστής στηλών είναι κάτι διαφορετικό από διαστήματα ή καρτέλες, όπως ένα κόμμα, μπορείτε να ορίσετε ότι στην εντολή awk ως εξής: awk -F, '{print $ 3}' tab1.txt> output1.txt Αυτό θα επιλέξει το στοιχείο από τη στήλη 3 κάθε γραμμής, εάν οι στήλες θεωρούνται διαχωρισμένες με κόμμα. Συνεπώς, η παραγωγή, στην περίπτωση αυτή, θα είναι: Τίτλος 545 Τίτλος 723 Τίτλος 610 Τίτλος 118 Τίτλος 482 Τίτλος 335 Τίτλος 271 Τίτλος 373 Η λίστα των δηλώσεων μέσα στα σγουρά ("{','} ') ονομάζεται μπλοκ. Αν βάζετε μια υπό όρους έκφραση μπροστά από ένα μπλοκ, η εντολή μέσα στο μπλοκ θα εκτελεστεί μόνο αν η προϋπόθεση είναι αληθής. awk '$ 7 == " $ 7,30" {print $ 3}' table1.txt Σε αυτήν την περίπτωση, η συνθήκη είναι $ 7 == " $ 7.30", πράγμα που σημαίνει ότι το στοιχείο στη στήλη 7 είναι ίσο με $ 7.30. Η ανάστροφη κάθετο μπροστά από το σύμβολο του δολαρίου χρησιμοποιείται για να εμποδίσει το σύστημα να ερμηνεύσει $ 7 ως μεταβλητή και αντ 'αυτού να πάρει το σημάδι του δολαρίου κυριολεκτικά. Έτσι, αυτή η δήλωση awk εκτυπώνει το στοιχείο στην 3η στήλη κάθε γραμμής που έχει "$ 7.30" στη στήλη 7. Μπορείτε επίσης να χρησιμοποιήσετε τις κανονικές εκφράσεις ως προϋπόθεση. Για παράδειγμα: awk '/ 30 / {print $ 3}' table1.txt Η συμβολοσειρά μεταξύ των δύο πτερύγων ('/') είναι η κανονική έκφραση. Σε αυτή την περίπτωση, είναι μόνο η σειρά "30." Αυτό σημαίνει ότι εάν μια γραμμή περιέχει τη συμβολοσειρά "30", το σύστημα εκτυπώνει το στοιχείο στην 3η στήλη αυτής της γραμμής. Η έξοδος στο παραπάνω παράδειγμα θα είναι: Timberlake, Ξεμωραμένος, Presley, Αν τα στοιχεία πίνακα είναι αριθμοί awk μπορούν να τρέξουν υπολογισμούς σε αυτά όπως στο παράδειγμα αυτό: awk '{print ($ 2 * $ 3) + $ 7}' Εκτός από τις μεταβλητές που προσπελαύνουν στοιχεία της τρέχουσας σειράς ($ 1, $ 2, κλπ.) Υπάρχει η μεταβλητή $ 0 η οποία αναφέρεται στην πλήρη σειρά (γραμμή) και τη μεταβλητή NF που κατέχει στον αριθμό των πεδίων. Μπορείτε επίσης να ορίσετε νέες μεταβλητές όπως σε αυτό το παράδειγμα: awk '{άθροισμα = 0; για το (col = 1; col <= NF; col ++) sum + = $ col; άθροισμα εκτύπωσης. } ' Αυτό υπολογίζει και εκτυπώνει το άθροισμα όλων των στοιχείων κάθε σειράς. Οι δηλώσεις Awk συχνά συνδυάζονται με εντολές sed.




