Πώς να χρησιμοποιήσετε σύνθετες εκφράσεις με το Awk στο Linux - Μέρος 5


Καθ' όλη τη διάρκεια, κοιτούσαμε απλές εκφράσεις όταν ελέγχαμε εάν μια προϋπόθεση πληρούται ή όχι. Τι γίνεται αν θέλετε να χρησιμοποιήσετε περισσότερες από μία εκφράσεις για να ελέγξετε για μια συγκεκριμένη συνθήκη;

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

Στο Awk, οι σύνθετες εκφράσεις δημιουργούνται χρησιμοποιώντας το && που αναφέρεται ως (και) και το | | αναφέρεται ως (ή) σύνθετοι τελεστές.

Η γενική σύνταξη για τις σύνθετες εκφράσεις είναι:

( first_expression ) && ( second_expression )

Εδώ, τα first_expression και second_expression πρέπει να είναι αληθή για να είναι αληθής ολόκληρη η έκφραση.

( first_expression ) || ( second_expression) 

Εδώ, μία από τις εκφράσεις είτε first_expression είτε second_expression πρέπει να είναι αληθής για να είναι αληθής ολόκληρη η έκφραση.

Προσοχή: Μην ξεχνάτε να συμπεριλαμβάνετε πάντα την παρένθεση.

Οι εκφράσεις μπορούν να δημιουργηθούν χρησιμοποιώντας τους τελεστές σύγκρισης που εξετάσαμε στο Μέρος 4 της σειράς awk.

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

Σε αυτό το παράδειγμα, έχουμε ένα αρχείο κειμένου με το όνομα tecmint_deals.txt, το οποίο περιέχει μια λίστα με μερικές εκπληκτικές τυχαίες προσφορές Tecmint, περιλαμβάνει το όνομα της συμφωνίας, την τιμή και τον τύπο.

No      Name                                    Price           Type
1       Mac_OS_X_Cleanup_Suite                  $9.99           Software
2       Basics_Notebook                         $14.99          Lifestyle
3       Tactical_Pen                            $25.99          Lifestyle
4       Scapple                                 $19.00          Unknown
5       Nano_Tool_Pack                          $11.99          Unknown
6       Ditto_Bluetooth_Altering_Device         $33.00          Tech
7       Nano_Prowler_Mini_Drone                 $36.99          Tech 

Ας πούμε ότι θέλουμε μόνο προσφορές εκτύπωσης και επισήμανσης που υπερβαίνουν τα 20$ και του τύπου "Tech " χρησιμοποιώντας το σύμβολο (**) στο τέλος κάθε γραμμής.

Θα χρειαστεί να εκτελέσουμε την παρακάτω εντολή.

# awk '($3 ~ /^$[2-9][0-9]*\.[0-9][0-9]$/) && ($4=="Tech") { printf "%s\t%s\n",$0,"*"; } ' tecmint_deals.txt 

6	Ditto_Bluetooth_Altering_Device		$33.00		Tech	*
7	Nano_Prowler_Mini_Drone			$36.99          Tech	 *

Σε αυτό το παράδειγμα, χρησιμοποιήσαμε δύο εκφράσεις σε μια σύνθετη έκφραση:

  1. Πρώτη έκφραση, ($3 ~ /^\$[2-9][0-9]*\.[0-9][0-9]$/) ; ελέγχει τις γραμμές για προσφορές με τιμές άνω των 20$ και ισχύει μόνο εάν η τιμή των 3$ που είναι η τιμή ταιριάζει με το μοτίβο /^\$[ 2-9][0-9]*\.[0-9][0-9]$/
  2. Και η δεύτερη έκφραση, ($4 == "Tech") ; ελέγχει εάν η συμφωνία είναι τύπου "Τεχνολογία" και ισχύει μόνο εάν η τιμή των 4$ ισούται με "Τεχνολογία".

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

Περίληψη

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

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