Πώς να χρησιμοποιήσετε τους χειριστές σύγκρισης με το Awk στο Linux - Μέρος 4


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

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

Τι είναι οι τελεστές σύγκρισης στο Awk;

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

  1. > – μεγαλύτερο από
  2. < – λιγότερο από
  3. >= – μεγαλύτερο ή ίσο με
  4. <= – μικρότερο ή ίσο με
  5. == – ίσο με
  6. != – δεν ισούται με
  7. some_value ~/pattern/ – true εάν some_value ταιριάζει με το μοτίβο
  8. some_value !~/pattern/ – true εάν some_value δεν ταιριάζει με το μοτίβο

Τώρα που εξετάσαμε τους διάφορους τελεστές σύγκρισης στο Awk, ας τους κατανοήσουμε καλύτερα χρησιμοποιώντας ένα παράδειγμα.

Σε αυτό το παράδειγμα, έχουμε ένα αρχείο με το όνομα food_list.txt που είναι μια λίστα αγορών για διαφορετικά είδη διατροφής και θα ήθελα να επισημάνω τρόφιμα των οποίων η ποσότητα είναι μικρότερη ή ίση με 20 προσθέτοντας ( **) στο τέλος κάθε γραμμής.

No      Item_Name               Quantity        Price
1       Mangoes                    45           $3.45
2       Apples                     25           $2.45
3       Pineapples                 5            $4.45
4       Tomatoes                   25           $3.45
5       Onions                     15           $1.45
6       Bananas                    30           $3.45

Η γενική σύνταξη για τη χρήση τελεστών σύγκρισης στο Awk είναι:

expression { actions; }

Για να πετύχω τον παραπάνω στόχο, θα πρέπει να εκτελέσω την παρακάτω εντολή:

# awk '$3 <= 30 { printf "%s\t%s\n", $0,"**" ; } $3 > 30 { print $0 ;}' food_list.txt

No	Item_Name`		Quantity	Price
1	Mangoes	      		   45		$3.45
2	Apples			   25		$2.45	**
3	Pineapples		   5		$4.45	**
4	Tomatoes		   25		$3.45	**
5	Onions			   15           $1.45	**
6	Bananas			   30           $3.45	**

Στο παραπάνω παράδειγμα, υπάρχουν δύο σημαντικά πράγματα που συμβαίνουν:

  1. Η πρώτη έκφραση { action ; } συνδυασμός, $3 <= 30 { printf “%s\t%s\n”, $0,”**” ; } εκτυπώνει γραμμές με ποσότητα μικρότερη ή ίση με 30 και προσθέτει ένα (**) στο τέλος κάθε γραμμής. Η πρόσβαση στην τιμή της ποσότητας γίνεται χρησιμοποιώντας τη μεταβλητή πεδίου $3.
  2. Η δεύτερη έκφραση { action ; } συνδυασμός, $3 > 30 { print $0 ;} εκτυπώνει τις γραμμές αμετάβλητες καθώς η ποσότητα τους είναι μεγαλύτερη από 30.

Ένα ακόμη παράδειγμα:

# awk '$3 <= 20 { printf "%s\t%s\n", $0,"TRUE" ; } $3 > 20  { print $0 ;} ' food_list.txt 

No	Item_Name		Quantity	Price
1	Mangoes			   45		$3.45
2	Apples			   25		$2.45
3	Pineapples		   5		$4.45	TRUE
4	Tomatoes		   25		$3.45
5	Onions			   15           $1.45	TRUE
6       Bananas	                   30           $3.45

Σε αυτό το παράδειγμα, θέλουμε να υποδείξουμε γραμμές με ποσότητα μικρότερη ή ίση με 20 με τη λέξη (TRUE) στο τέλος.

Περίληψη

Αυτός είναι ένας εισαγωγικός οδηγός για τελεστές σύγκρισης στο Awk, επομένως πρέπει να δοκιμάσετε πολλές άλλες επιλογές και να ανακαλύψετε περισσότερα.

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