Awk: Εκμάθηση της δέσμης ενεργειών Shell χρησιμοποιώντας την εντολή Terminal awk
Η εντολή "awk" στα Ελεύθερα Λειτουργικά Συστήματα τύπου GNU / Linux είναι μια πολύ ισχυρή εντολή, η οποία μας βοηθά να έχουμε μεγαλύτερο έλεγχο κατά την επεξεργασία δεδομένων από άλλες εντολές ή εντολές. Το όνομα AWK προέρχεται από τα αρχικά των επωνύμων των συγγραφέων του: Alfred AΧο, Πέτερ Weinberger και Brian KΈρνιγκαν.
Αυτή η εντολή παρέχει μια γλώσσα δέσμης ενεργειών για την επεξεργασία κειμένου με την οποία μπορούμε: Καθορισμός μεταβλητών, χρήση συμβολοσειρών και αριθμητικών τελεστών, χρήση ελέγχου ροής και κύκλων και δημιουργία μορφοποιημένων αναφορών. Στην πραγματικότητα, το Awk είναι κάτι περισσότερο από μια εντολή επεξεργασίας προτύπων, είναι μια ολόκληρη γλώσσα σημασιολογικής ανάλυσης.
Εισαγωγή στην εντολή "awk"
Το AWK ήταν ένα από τα πρώτα πολύ δημοφιλή βοηθητικά προγράμματα κονσόλας για τη διαχείριση (χειρισμός / εξαγωγή) δεδομένων μεγιστοποιώντας τη λειτουργικότητα των αγωγών UNIX. Η γλώσσα που παρέχεται από αυτό το βοηθητικό πρόγραμμα είναι επί του παρόντος ένα πρότυπο σε σχεδόν όλα τα σύγχρονα λειτουργικά συστήματα τύπου UNIX, τόσο πολύ που αποτελεί μέρος των βασικών προδιαγραφών UNIX, επομένως συνήθως είναι ήδη εγκατεστημένο στα περισσότερα από αυτά από προεπιλογή.
Η πιο κοινή σύνταξή του είναι: awk «πρόγραμμα» αρχεία και πού μπορεί να είναι το «πρόγραμμα»: pattern {action} pattern {action}. Η εντολή διαβάζει την εισαγωγή αρχείου μία γραμμή κάθε φορά. Κάθε σειρά συγκρίνεται με κάθε μοτίβο με τη σειρά. για κάθε μοτίβο που ταιριάζει με τη σειρά, εκτελείται η αντίστοιχη ενέργεια.
Ένα απλό παράδειγμα όπως:
awk -F: '$1=="root" {print}' /etc/passwd
ζητάει το πρώτο πεδίο εάν είναι root κάθε γραμμής στο / etc / passwd και το εκτυπώνει λαμβάνοντας υπόψη το ":" με το -F: ως διαχωριστικό πεδίου.
Πρακτικά παραδείγματα
Λίστα εντολών που χρησιμοποιούνται περισσότερο
Προβάλετε μια λίστα με βάση το ιστορικό του τερματικού συστήματος που έχει ταξινομηθεί από τα πιο συχνά χρησιμοποιούμενα στο λιγότερο.
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
Παράδειγμα:

Γράφημα (Πίνακας) με αριθμό συνδέσεων για κάθε κεντρικό υπολογιστή
Δημιουργήστε ένα γράφημα βάσει κειμένου ASCII που δείχνει τον συνολικό αριθμό συνδέσεων από τον κεντρικό υπολογιστή σε κάθε διεύθυνση IP.
netstat -an | grep ESTABLISHED | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | awk '{ printf("%s\t%s\t",$2,$1) ; for (i = 0; i < $1; i++) {printf("*")}; print "" }'
Παράδειγμα:

Κατάλογος καταλόγων κατά μέγεθος
Εκτυπώστε στην οθόνη τη λίστα των καταλόγων της τρέχουσας διαδρομής από τη μεγαλύτερη έως τη μικρότερη που δείχνει τις ετικέτες που αντιστοιχούν στο μέγεθός τους χρησιμοποιώντας τα γράμματα: g, m και k.
du --max-depth=1 | sort -r -n | awk '{split("k m g",v); s=1; while($1>1024){$1/=1024; s++} print int($1)" "v[s]"\t"$2}'
Παράδειγμα:

Εμφάνιση επισκεψιμότητας από μια διασύνδεση δικτύου
Προβάλετε την κατανάλωση εισερχόμενων και εξερχόμενων δεδομένων στο διαδίκτυο σε kilobyte (kb) για μια συγκεκριμένη διεπαφή δικτύου.
while [ /bin/true ]; do OLD=$NEW; NEW=`cat /proc/net/dev | grep eth0 | tr -s ' ' | cut -d' ' -f "3 11"`; echo $NEW $OLD | awk '{printf("\rin: % 9.2g\t\tout: % 9.2g", ($1-$3)/1024, ($2-$4)/1024)}'; sleep 1; done
Παράδειγμα:

Αποκτήστε μια σειρά αριθμών fibonacci
Δημιουργήστε μια λίστα με αριθμούς ποσότητας Χ ακολουθώντας ένα μοτίβο fibonacci, δίνοντας 2 βασικούς αριθμούς που θα κατασκευαστούν.
seq 50| awk 'BEGIN {a=1; b=1} {print a; c=a+b; a=b; b=c}'
Παράδειγμα:

Γραφική λίστα της δομής αρχείων κατά μέγεθος
Λάβετε μια λίστα με όλους τους φακέλους στη ρίζα του λειτουργικού συστήματος μαζί με το γραφικό (γραμμές) και την αριθμητική αναπαράσταση ως ποσοστό του μεγέθους τους μέσα σε αυτό.
t=$(df|awk 'NR!=1{sum+=$2}END{print sum}');sudo du / --max-depth=1|sed '$d'|sort -rn -k1 | awk -v t=$t 'OFMT="%d" {M=64; for (a=0;a<$1;a++){if (a>c){c=a}}br=a/c;b=M*br;for(x=0;x<b;x++){printf "\033[1;31m" "|" "\033[0m"}print " "$2" "(a/t*100)"% total"}'
Παράδειγμα:

Καταχωρίστε μια σύνοψη των τύπων αρχείων σε έναν κατάλογο
Εμφάνιση λίστας των τύπων αρχείων που περιέχονται σε έναν κατάλογο μαζί με τον αριθμό των αρχείων που αντιστοιχούν σε αυτόν.
find . -type f | awk -F'.' '{print $NF}' | sort| uniq -c | sort -g
Παράδειγμα:

Αυτά τα παραδείγματα γραμμών εντολών που χρησιμοποιούν την εντολή awk ελπίζω να τα βρείτε πολύ χρήσιμα. Και χρησιμεύουν για χρήση απευθείας από την κονσόλα ή έμμεσα με την εισαγωγή τους σε ένα σενάριο (αυτοματοποιημένη εργασία).
Στην επόμενη ανάρτηση στο Shell Scripting θα διερευνήσουμε άλλες εντολές.
Αν θέλετε να μάθετε περισσότερα σχετικά με την εντολή "grep", επισκεφτείτε αυτόν τον σύνδεσμο "DEBIAN WikiΚαι αν θέλετε να μάθετε περισσότερα για το Shell Scripting στο δικό μας Blog, μπορείτε να ρίξετε μια ματιά στις άλλες δημοσιεύσεις μας για το θέμα κάνοντας κλικ εδώ: Δημιουργία σεναρίων στο FromLinux
