Πώς να χρησιμοποιήσετε τους χειριστές σύγκρισης με το Awk στο Linux - Μέρος 4
Όταν ασχολείστε με αριθμητικές τιμές ή τιμές συμβολοσειρών σε μια γραμμή κειμένου, το φιλτράρισμα κειμένου ή συμβολοσειρών με χρήση τελεστών σύγκρισης είναι χρήσιμο για τους χρήστες εντολών Awk.
Σε αυτό το μέρος της σειράς Awk, θα ρίξουμε μια ματιά στο πώς μπορείτε να φιλτράρετε κείμενο ή συμβολοσειρές χρησιμοποιώντας τελεστές σύγκρισης. Εάν είστε προγραμματιστής, τότε πρέπει να είστε ήδη εξοικειωμένοι με τους τελεστές σύγκρισης, αλλά αυτούς που δεν είναι, επιτρέψτε μου να σας εξηγήσω στην παρακάτω ενότητα.
Τι είναι οι τελεστές σύγκρισης στο Awk;
Οι τελεστές σύγκρισης στο Awk χρησιμοποιούνται για τη σύγκριση της τιμής των αριθμών ή των συμβολοσειρών και περιλαμβάνουν τα ακόλουθα:
>
– μεγαλύτερο από<
– λιγότερο από>=
– μεγαλύτερο ή ίσο με<=
– μικρότερο ή ίσο με==
– ίσο με!=
– δεν ισούται μεsome_value ~/pattern/
– true εάν some_value ταιριάζει με το μοτίβο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 **
Στο παραπάνω παράδειγμα, υπάρχουν δύο σημαντικά πράγματα που συμβαίνουν:
- Η πρώτη έκφραση { action ; } συνδυασμός, $3 <= 30 { printf “%s\t%s\n”, $0,”**” ; } εκτυπώνει γραμμές με ποσότητα μικρότερη ή ίση με 30 και προσθέτει ένα (**) στο τέλος κάθε γραμμής. Η πρόσβαση στην τιμή της ποσότητας γίνεται χρησιμοποιώντας τη μεταβλητή πεδίου $3.
- Η δεύτερη έκφραση { 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 όπου θα σας μεταφέρω μέσα από σύνθετες εκφράσεις.