Πώς να γράψετε εντολές και δέσμες ενεργειών AWK

Εντολές, σύνταξη και παραδείγματα

Η εντολή 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.30 2, Taylor Swift, Τίτλος 723, Τιμή $ 7.90 3, Mick Jagger, Τίτλος 610, Τιμή $ 7.90 4, Lady Gaga, Τίτλος 118, Τιμή $ 7.30 5, Johnny Cash, Τίτλος 482, Τιμή $ 6.50 6, Elvis Presley, Τίτλος 335, Τιμή $ 7.30 7, John Lennon, Τίτλος 271, Τιμή $ 7.90 8, Michael Jackson, Τίτλος 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, Gaga, Presley,

Αν τα στοιχεία πίνακα είναι αριθμοί awk μπορούν να τρέξουν υπολογισμούς σε αυτά όπως στο παράδειγμα αυτό:

awk '{print ($ 2 * $ 3) + $ 7}'

Εκτός από τις μεταβλητές που προσπελαύνουν στοιχεία της τρέχουσας σειράς ($ 1, $ 2, κλπ.) Υπάρχει η μεταβλητή $ 0 η οποία αναφέρεται στην πλήρη σειρά (γραμμή) και τη μεταβλητή NF που κατέχει στον αριθμό των πεδίων.

Μπορείτε επίσης να ορίσετε νέες μεταβλητές όπως σε αυτό το παράδειγμα:

awk '{άθροισμα = 0; για το (col = 1; col <= NF; col ++) sum + = $ col; άθροισμα εκτύπωσης. } '

Αυτό υπολογίζει και εκτυπώνει το άθροισμα όλων των στοιχείων κάθε σειράς.

Οι δηλώσεις Awk συχνά συνδυάζονται με εντολές sed .