Μάθετε πώς να χρησιμοποιείτε τις ενσωματωμένες μεταβλητές Awk - Μέρος 10


Καθώς αποκαλύπτουμε την ενότητα των δυνατοτήτων Awk, σε αυτό το μέρος της σειράς, θα περιηγηθούμε στην έννοια των ενσωματωμένων μεταβλητών στο Awk. Υπάρχουν δύο τύποι μεταβλητών που μπορείτε να χρησιμοποιήσετε στο Awk, αυτοί είναι: Μεταβλητές καθορισμένες από το χρήστη, τις οποίες καλύψαμε στο Μέρος 8 και ενσωματωμένες μεταβλητές.

Οι ενσωματωμένες μεταβλητές έχουν τιμές που έχουν ήδη καθοριστεί στο Awk, αλλά μπορούμε επίσης να τις αλλάξουμε προσεκτικά αυτές τις τιμές, καθώς οι ενσωματωμένες μεταβλητές περιλαμβάνουν:

  1. FILENAME : τρέχον όνομα αρχείου εισαγωγής (μην αλλάξετε το όνομα μεταβλητής)
  2. FR : αριθμός της τρέχουσας γραμμής εισόδου (δηλαδή γραμμή εισόδου 1, 2, 3… ούτω καθεξής, μην αλλάξετε το όνομα της μεταβλητής)
  3. NF : αριθμός πεδίων στην τρέχουσα γραμμή εισαγωγής (μην αλλάξετε το όνομα της μεταβλητής)
  4. OFS : διαχωριστικό πεδίου εξόδου
  5. FS : διαχωριστικό πεδίου εισαγωγής
  6. ORS : διαχωριστικό εγγραφών εξόδου
  7. RS : διαχωριστικό εγγραφής εισόδου

Ας προχωρήσουμε στην επεξήγηση της χρήσης ορισμένων από τις ενσωματωμένες μεταβλητές Awk παραπάνω:

Για να διαβάσετε το όνομα αρχείου του τρέχοντος αρχείου εισόδου, μπορείτε να χρησιμοποιήσετε την ενσωματωμένη μεταβλητή FILENAME ως εξής:

awk ' { print FILENAME } ' ~/domains.txt 

Θα συνειδητοποιήσετε ότι, το όνομα αρχείου εκτυπώνεται για κάθε γραμμή εισόδου, αυτή είναι η προεπιλεγμένη συμπεριφορά του Awk όταν χρησιμοποιείτε την ενσωματωμένη μεταβλητή FILENAME.

Χρησιμοποιώντας το NR για να μετρήσετε τον αριθμό των γραμμών (εγγραφών) σε ένα αρχείο εισόδου, θυμηθείτε ότι μετράει και τις κενές γραμμές, όπως θα δούμε στο παρακάτω παράδειγμα.

Όταν προβάλλουμε το αρχείο domains.txt χρησιμοποιώντας την εντολή cat, περιέχει 14 γραμμές με κείμενο και κενές 2 γραμμές:

cat ~/domains.txt

awk ' END { print "Number of records in file is: ", NR } ' ~/domains.txt 

Για να μετρήσουμε τον αριθμό των πεδίων σε μια εγγραφή ή μια γραμμή, χρησιμοποιούμε την ενσωματωμένη μεταβλητή NR ως εξής:

cat ~/names.txt

awk '{ print "Record:",NR,"has",NF,"fields" ; }' ~/names.txt

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

Η προεπιλεγμένη τιμή για το FS είναι space και tab, αλλά μπορούμε να αλλάξουμε την τιμή του FS σε οποιονδήποτε χαρακτήρα θα δώσει εντολή στο Awk να διαιρέσει τις γραμμές εισόδου ανάλογα.

Υπάρχουν δύο μέθοδοι για να γίνει αυτό:

  1. μια μέθοδος είναι να χρησιμοποιήσετε την ενσωματωμένη μεταβλητή FS
  2. και το δεύτερο είναι να καλέσετε την επιλογή -F Awk

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

Μπορούμε να χρησιμοποιήσουμε την επιλογή -F ως εξής:

awk -F':' '{ print $1, $4 ;}' /etc/passwd

Προαιρετικά, μπορούμε επίσης να εκμεταλλευτούμε την ενσωματωμένη μεταβλητή FS όπως παρακάτω:

awk ' BEGIN {  FS=“:” ; }  { print $1, $4  ; } ' /etc/passwd

Για να καθορίσετε ένα διαχωριστικό πεδίου εξόδου, χρησιμοποιήστε την ενσωματωμένη μεταβλητή OFS, ορίζει πώς θα διαχωριστούν τα πεδία εξόδου χρησιμοποιώντας τον χαρακτήρα που χρησιμοποιούμε όπως στο παρακάτω παράδειγμα:

awk -F':' ' BEGIN { OFS="==>" ;} { print $1, $4 ;}' /etc/passwd

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

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