Τι είναι το AWK NF;

Ti Einai To Awk Nf



Η γλώσσα δέσμης ενεργειών AWK έχει επίσης μια σειρά από ενσωματωμένες ειδικές μεταβλητές για την εξυπηρέτηση ορισμένων προκαθορισμένων σκοπών. Μια τέτοια ενσωματωμένη μεταβλητή είναι η 'NF' η οποία έχει τη δική της προκαθορισμένη λειτουργικότητα. Αυτό το άρθρο θα διερευνήσει τον σκοπό αυτής της ενσωματωμένης μεταβλητής AWK επιδεικνύοντας ορισμένα σχετικά παραδείγματα στο Ubuntu 20.04.

AWK NF στο Ubuntu 20.04:

Η μεταβλητή 'NF' AWK χρησιμοποιείται για την εκτύπωση του αριθμού των πεδίων σε όλες τις γραμμές οποιουδήποτε παρεχόμενου αρχείου. Αυτή η ενσωματωμένη μεταβλητή επαναλαμβάνεται σε όλες τις γραμμές του αρχείου μία προς μία και εκτυπώνει τον αριθμό των πεδίων ξεχωριστά για κάθε γραμμή. Για να κατανοήσετε καλά αυτή τη λειτουργία, θα πρέπει να διαβάσετε τα παραδείγματα που αναφέρονται παρακάτω.

Παραδείγματα για την επίδειξη της χρήσης του AWK NF στο Ubuntu 20.04:

Τα ακόλουθα τέσσερα παραδείγματα έχουν σχεδιαστεί με τρόπο που να σας διδάσκουν τη χρήση του AWK NF με έναν πολύ εύκολο στην κατανόηση τρόπο. Όλα αυτά τα παραδείγματα έχουν υλοποιηθεί χρησιμοποιώντας το λειτουργικό σύστημα Ubuntu 20.04.







Παράδειγμα # 1: Εκτυπώστε τον αριθμό των πεδίων από κάθε γραμμή ενός αρχείου κειμένου:

Σε αυτό το παράδειγμα, θέλαμε να εκτυπώσουμε τον αριθμό των πεδίων ή στηλών κάθε γραμμής ή σειράς ή εγγραφής ενός αρχείου κειμένου στο Ubuntu 20.04. Για να σας δείξουμε τη μέθοδο για να το κάνετε αυτό, δημιουργήσαμε το αρχείο κειμένου που φαίνεται στην παρακάτω εικόνα. Αυτό το αρχείο κειμένου περιέχει τα ποσοστά των μήλων ανά κιλό από πέντε διαφορετικές πόλεις του Πακιστάν.





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





$ οκ ' { εκτύπωση NF } AppleRates.txt

Σε αυτήν την εντολή, έχουμε τη λέξη-κλειδί 'awk' που δείχνει ότι εκτελούμε μια εντολή AWK ακολουθούμενη από τη δήλωση 'print NF' που απλώς θα επαναληφθεί σε κάθε γραμμή του αρχείου κειμένου προορισμού και θα εκτυπώσει τον αριθμό των πεδίων ξεχωριστά για κάθε γραμμή του αρχείου κειμένου. Τέλος, έχουμε το όνομα αυτού του αρχείου κειμένου (τα πεδία του οποίου πρέπει να μετρηθούν) που στην περίπτωσή μας είναι 'AppleRatest.txt'.



Εφόσον είχαμε τον ίδιο ακριβώς αριθμό πεδίων και για τις πέντε γραμμές του αρχείου κειμένου μας, δηλαδή 2, εκτυπώνεται ο ίδιος αριθμός με τον αριθμό των πεδίων για όλες τις γραμμές του αρχείου κειμένου λόγω της εκτέλεσης αυτής της εντολής. Αυτό φαίνεται από την παρακάτω εικόνα:

Παράδειγμα # 2: Εκτυπώστε τον αριθμό των πεδίων από κάθε γραμμή ενός αρχείου κειμένου με τρόπο παρουσίασης:

Η έξοδος που εμφανίζεται στο παράδειγμα που συζητήθηκε παραπάνω μπορεί επίσης να παρουσιαστεί όμορφα εμφανίζοντας τους αριθμούς γραμμών και τον αριθμό των πεδίων κάθε γραμμής του αρχείου κειμένου. Επιπλέον, μπορούμε επίσης να διαχωρίσουμε τους αριθμούς των γραμμών από τον αριθμό των πεδίων με οποιονδήποτε ειδικό χαρακτήρα της επιλογής μας. Θα χρησιμοποιήσουμε το ίδιο αρχείο κειμένου που χρησιμοποιήσαμε για το πρώτο μας παράδειγμα για να σας το δείξουμε αυτό. Ωστόσο, η εντολή μας που πρόκειται να εκτελεστεί σε αυτήν την περίπτωση θα διαφέρει ελαφρώς και είναι η εξής:

$ οκ ' { εκτύπωση NR, “---”, NF } AppleRates.txt

Σε αυτήν την εντολή, έχουμε εισαγάγει την ενσωματωμένη μεταβλητή AWK 'NR' που απλά θα εκτυπώσει τους αριθμούς γραμμών όλων των γραμμών του αρχείου κειμένου προορισμού μας. Επιπλέον, χρησιμοποιήσαμε τρεις παύλες, «—» ως ειδικό χαρακτήρα για να διαχωρίσουμε τους αριθμούς των γραμμών από τον αριθμό των πεδίων του παρεχόμενου αρχείου κειμένου.

Αυτή η ελαφρώς τροποποιημένη έξοδος του ίδιου αρχείου κειμένου φαίνεται στην παρακάτω εικόνα:

Παράδειγμα # 3: Εκτυπώστε το πρώτο και το τελευταίο πεδία από κάθε γραμμή ενός αρχείου κειμένου:

Εκτός από την απλή μέτρηση του αριθμού των πεδίων όλων των γραμμών ενός παρεχόμενου αρχείου κειμένου, η ειδική μεταβλητή «NF» του AWK μπορεί επίσης να χρησιμοποιηθεί για την εξαγωγή των πραγματικών τιμών του τελευταίου πεδίου από το παρεχόμενο αρχείο κειμένου. Και πάλι, χρησιμοποιήσαμε το ίδιο αρχείο κειμένου που χρησιμοποιήσαμε για τα δύο πρώτα παραδείγματα. Ωστόσο, θέλουμε να εκτυπώσουμε τις πραγματικές τιμές του πρώτου και του τελευταίου πεδίου του αρχείου κειμένου σε αυτό το παράδειγμα. Για αυτό, εκτελέσαμε την ακόλουθη εντολή:

$ οκ ' { Τυπώνω $1 , $NF } AppleRates.txt

Η λέξη-κλειδί 'awk' ακολουθείται από τη δήλωση 'εκτύπωση $1, $NF' σε αυτήν την εντολή. Η ειδική μεταβλητή '$1' έχει χρησιμοποιηθεί για την εκτύπωση των τιμών του πρώτου πεδίου ή της πρώτης στήλης του παρεχόμενου αρχείου κειμένου, ενώ η μεταβλητή '$NF' AWK έχει χρησιμοποιηθεί για την εκτύπωση των τιμών του τελευταίου πεδίου ή της τελευταίας στήλης του αρχείου κειμένου στόχου μας. Πρέπει να προσέξετε εδώ ότι όταν χρησιμοποιούμε τη μεταβλητή 'NF' AWK ως έχει, τότε χρησιμοποιείται για να μετρήσει τον αριθμό των πεδίων κάθε γραμμής. Ωστόσο, όταν χρησιμοποιείται με το σύμβολο του δολαρίου '$', απλώς θα εξαγάγει τις πραγματικές τιμές από το τελευταίο πεδίο του παρεχόμενου αρχείου κειμένου. Η υπόλοιπη εντολή είναι λίγο πολύ η ίδια με αυτή των εντολών που χρησιμοποιήθηκαν για τα δύο πρώτα παραδείγματα.

Στην έξοδο που φαίνεται παρακάτω, μπορείτε να δείτε ότι οι πραγματικές τιμές από το πρώτο και το τελευταίο πεδία του παρεχόμενου αρχείου κειμένου έχουν εκτυπωθεί στο τερματικό. Μπορείτε να δείτε ότι αυτή η έξοδος είναι σχεδόν παρόμοια με την έξοδο της εντολής 'cat' μόνο και μόνο επειδή είχαμε μόνο δύο πεδία στο παρεχόμενο αρχείο κειμένου. Επομένως, κατά κάποιο τρόπο, τα περιεχόμενα ολόκληρου του αρχείου κειμένου εκτυπώθηκαν στο τερματικό ως αποτέλεσμα της εκτέλεσης της παραπάνω εντολής.

Παράδειγμα # 4: Διαχωρίστε τις εγγραφές με πεδία που λείπουν σε ένα αρχείο κειμένου:

Μερικές φορές, υπάρχουν ορισμένες εγγραφές σε ένα αρχείο κειμένου με ορισμένα πεδία που λείπουν και ίσως θέλετε να διαχωρίσετε αυτές τις εγγραφές από αυτές που είναι πλήρεις από κάθε άποψη. Αυτό μπορεί επίσης να γίνει χρησιμοποιώντας τη μεταβλητή 'NF' AWK. Για αυτό, δημιουργήσαμε ένα αρχείο κειμένου με το όνομα 'ExamMarks.txt' που περιέχει τις βαθμολογίες των εξετάσεων πέντε διαφορετικών μαθητών σε τρεις διαφορετικές εξετάσεις μαζί με τα ονόματά τους. Ωστόσο, για την τρίτη εξέταση, κάποιοι από τους μαθητές απουσίαζαν εξαιτίας των οποίων έλειπαν οι βαθμολογίες τους. Αυτό το αρχείο κειμένου έχει ως εξής:

Για να διακρίνουμε τις εγγραφές με πεδία που λείπουν από τις εγγραφές με τα πλήρη πεδία, θα εκτελέσουμε την εντολή που φαίνεται παρακάτω:

$ οκ ' { εκτύπωση NR, '--- > », NF } ’ ExamMarks.txt

Αυτή η εντολή είναι ίδια με αυτή που χρησιμοποιήσαμε για το δεύτερο παράδειγμά μας. Ωστόσο, από την έξοδο αυτής της εντολής που φαίνεται στην παρακάτω εικόνα, μπορείτε να δείτε ότι η πρώτη και η τέταρτη εγγραφή έχουν ολοκληρωθεί, ενώ η δεύτερη, η τρίτη και η πέμπτη εγγραφή περιέχουν πεδία που λείπουν.

Συμπέρασμα:

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