Πώς να επιτρέψετε στο Awk να χρησιμοποιεί μεταβλητές κελύφους - Μέρος 11


Όταν γράφουμε σενάρια φλοιού, συνήθως συμπεριλαμβάνουμε άλλα μικρότερα προγράμματα ή εντολές, όπως λειτουργίες Awk στα σενάρια μας. Στην περίπτωση του Awk, πρέπει να βρούμε τρόπους για να περάσουμε κάποιες τιμές από το κέλυφος στις λειτουργίες Awk.

Αυτό μπορεί να γίνει χρησιμοποιώντας μεταβλητές φλοιού εντός εντολών Awk και σε αυτό το μέρος της σειράς, θα μάθουμε πώς να επιτρέψουμε στο Awk να χρησιμοποιεί μεταβλητές φλοιού που μπορεί να περιέχουν τιμές που θέλουμε να περάσουμε στις εντολές Awk.

Υπάρχουν πιθανώς δύο τρόποι με τους οποίους μπορείτε να ενεργοποιήσετε το Awk να χρησιμοποιεί μεταβλητές φλοιού:

1. Χρησιμοποιώντας το Shell Quoting

Ας ρίξουμε μια ματιά σε ένα παράδειγμα για να δείξουμε πώς μπορείτε πραγματικά να χρησιμοποιήσετε την παράθεση κελύφους για να αντικαταστήσετε την τιμή μιας μεταβλητής φλοιού σε μια εντολή Awk. Σε αυτό το παράδειγμα, θέλουμε να αναζητήσουμε ένα όνομα χρήστη στο αρχείο /etc/passwd, να φιλτράρουμε και να εκτυπώσουμε τα στοιχεία του λογαριασμού του χρήστη.

Επομένως, μπορούμε να γράψουμε ένα σενάριο test.sh με το ακόλουθο περιεχόμενο:

#!/bin/bash

#read user input
read -p "Please enter username:" username

#search for username in /etc/passwd file and print details on the screen
cat /etc/passwd | awk "/$username/ "' { print $0 }'

Στη συνέχεια, αποθηκεύστε το αρχείο και βγείτε.

Ερμηνεία της εντολής Awk στο σενάριο test.sh παραπάνω:

cat /etc/passwd | awk "/$username/ "' { print $0 }'

\/$username/ \ – παράθεση φλοιού που χρησιμοποιείται για να αντικαταστήσει την τιμή της μεταβλητής φλοιού username στην εντολή Awk. Η τιμή του όνομα χρήστη είναι το μοτίβο που θα αναζητηθεί στο αρχείο /etc/passwd.

Λάβετε υπόψη ότι το διπλό εισαγωγικό βρίσκεται εκτός του σεναρίου Awk, ‘{ print $0 }’.

Στη συνέχεια, κάντε το σενάριο εκτελέσιμο και εκτελέστε το ως εξής:

$ chmod  +x  test.sh
$ ./text.sh 

Μετά την εκτέλεση του σεναρίου, θα σας ζητηθεί να εισαγάγετε ένα όνομα χρήστη, να πληκτρολογήσετε ένα έγκυρο όνομα χρήστη και να πατήσετε Enter. Θα δείτε τα στοιχεία του λογαριασμού του χρήστη από το αρχείο /etc/passwd ως εξής:

2. Χρήση της μεταβλητής ανάθεσης του Awk

Αυτή η μέθοδος είναι πολύ απλούστερη και καλύτερη σε σύγκριση με την παραπάνω μέθοδο. Λαμβάνοντας υπόψη το παραπάνω παράδειγμα, μπορούμε να εκτελέσουμε μια απλή εντολή για να ολοκληρώσουμε την εργασία. Σύμφωνα με αυτήν τη μέθοδο, χρησιμοποιούμε την επιλογή -v για να εκχωρήσουμε μια μεταβλητή φλοιού σε μια μεταβλητή Awk.

Αρχικά, δημιουργήστε μια μεταβλητή φλοιού, username και αντιστοιχίστε της το όνομα που θέλουμε να αναζητήσουμε στο αρχείο /etc/passswd:

username="aaronkilik"

Στη συνέχεια, πληκτρολογήστε την παρακάτω εντολή και πατήστε Enter:

# cat /etc/passwd | awk -v name="$username" ' $0 ~ name {print $0}'

Επεξήγηση της παραπάνω εντολής:

  1. -v – Επιλογή Awk για να δηλώσετε μια μεταβλητή
  2. όνομα χρήστη – είναι η μεταβλητή φλοιού
  3. όνομα – είναι η μεταβλητή Awk

Ας ρίξουμε μια προσεκτική ματιά στο $0 ~ name μέσα στο σενάριο του Awk, $0 ~ name {print $0}. Θυμηθείτε, όταν καλύψαμε τους τελεστές σύγκρισης Awk στο Μέρος 4 αυτής της σειράς, ένας από τους τελεστές σύγκρισης ήταν η τιμή ~ μοτίβο, που σημαίνει: αληθές εάν η τιμή ταιριάζει με το μοτίβο.

Το output($0) της εντολής cat που διοχετεύεται στο Awk ταιριάζει με το μοτίβο (aaronkilik) που είναι το όνομα που αναζητούμε στο /etc/passwd , ως αποτέλεσμα, η λειτουργία σύγκρισης είναι αληθής. Στη συνέχεια, η γραμμή που περιέχει τις πληροφορίες του λογαριασμού του χρήστη εκτυπώνεται στην οθόνη.

συμπέρασμα

Καλύψαμε μια σημαντική ενότητα των χαρακτηριστικών του Awk, που μπορούν να μας βοηθήσουν να χρησιμοποιήσουμε μεταβλητές φλοιού στις εντολές Awk. Πολλές φορές, θα γράψετε μικρά προγράμματα ή εντολές Awk μέσα σε σενάρια κελύφους και επομένως, πρέπει να έχετε ξεκάθαρη κατανόηση του τρόπου χρήσης μεταβλητών φλοιού μέσα στις εντολές Awk.

Στο επόμενο μέρος της σειράς Awk, θα βουτήξουμε σε μια άλλη κρίσιμη ενότητα των χαρακτηριστικών του Awk, δηλαδή τις δηλώσεις ελέγχου ροής. Μείνετε συντονισμένοι λοιπόν και ας συνεχίσουμε να μαθαίνουμε και να μοιραζόμαστε.