Πώς να χρησιμοποιήσετε την εντολή "next" με το Awk στο Linux - Μέρος 6


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

Η εντολή next σάς βοηθά να αποτρέψετε την εκτέλεση όσων θα αναφερόμουν ως βήματα απώλειας χρόνου σε μια εκτέλεση εντολής.

Για να κατανοήσουμε πώς λειτουργεί, ας εξετάσουμε ένα αρχείο που ονομάζεται food_list.txt που μοιάζει με αυτό:

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

Εξετάστε το ενδεχόμενο να εκτελέσετε την ακόλουθη εντολή που θα επισημάνει τα τρόφιμα των οποίων η ποσότητα είναι μικρότερη ή ίση με 20 με ένα σύμβολο (*) στο τέλος κάθε γραμμής:

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

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

Η παραπάνω εντολή λειτουργεί στην πραγματικότητα ως εξής:

  1. Αρχικά, ελέγχει εάν η ποσότητα, το τέταρτο πεδίο κάθε γραμμής εισόδου είναι μικρότερη ή ίση με 20, εάν μια τιμή πληροί αυτήν την προϋπόθεση, εκτυπώνεται και επισημαίνεται με το (*) Υπογράψτε στο τέλος χρησιμοποιώντας την έκφραση ένα: $4 <= 20
  2. Δεύτερον, ελέγχει εάν το τέταρτο πεδίο κάθε γραμμής εισόδου είναι μεγαλύτερο από 20 και εάν μια γραμμή πληροί την προϋπόθεση, εκτυπώνεται χρησιμοποιώντας την έκφραση δύο: $4 > 20

Αλλά υπάρχει ένα πρόβλημα εδώ, όταν εκτελείται η πρώτη έκφραση, εκτυπώνεται μια γραμμή που θέλουμε να επισημάνουμε χρησιμοποιώντας: { printf "%s\t%s\n", $0, "**" ; } και, στη συνέχεια, στο ίδιο βήμα, ελέγχεται επίσης η δεύτερη έκφραση που γίνεται παράγοντας απώλειας χρόνου.

Επομένως, δεν χρειάζεται να εκτελέσετε ξανά τη δεύτερη έκφραση, $4 > 20 μετά την εκτύπωση ήδη επισημασμένων γραμμών που έχουν εκτυπωθεί χρησιμοποιώντας την πρώτη έκφραση.

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

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

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

Αφού εκτυπωθεί μία γραμμή εισόδου χρησιμοποιώντας $4 <= 20 { printf "%s\t%s\n", $0,"*" ; Επόμενο ; }, η εντολή next που περιλαμβάνεται θα βοηθήσει στην παράλειψη της δεύτερης έκφρασης $4 > 20 { print $0 ;}, οπότε η εκτέλεση πηγαίνει στο την επόμενη γραμμή εισόδου χωρίς να χρειάζεται να χάσετε χρόνο για να ελέγξετε εάν η ποσότητα είναι μεγαλύτερη από 20.

Η εντολή next είναι πολύ σημαντική είναι η σύνταξη αποτελεσματικών εντολών και όπου χρειάζεται, μπορείτε πάντα να τη χρησιμοποιείτε για να επιταχύνετε την εκτέλεση ενός σεναρίου. Προετοιμαστείτε για το επόμενο μέρος της σειράς όπου θα εξετάσουμε τη χρήση τυπικής εισόδου (STDIN) ως είσοδο για το Awk.

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