Cara Menggunakan Perintah 'berikutnya' dengan Awk di Linux - Bagian 6


Di bagian keenam dari seri Awk ini, kita akan melihat penggunaan perintah next, yang memerintahkan Awk untuk melewati semua pola dan ekspresi yang tersisa yang telah Anda berikan, melainkan membaca yang berikutnya jalur masukan.

Perintah next membantu Anda mencegah eksekusi apa yang saya sebut sebagai langkah-langkah yang membuang-buang waktu dalam eksekusi perintah.

Untuk memahami cara kerjanya, mari kita perhatikan file bernama food_list.txt yang terlihat seperti ini:

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

Pertimbangkan untuk menjalankan perintah berikut yang akan menandai item makanan yang jumlahnya kurang dari atau sama dengan 20 dengan tanda (*) di akhir setiap baris:

# 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

Perintah di atas sebenarnya berfungsi sebagai berikut:

  1. Pertama, ia memeriksa apakah kuantitas, bidang keempat dari setiap baris masukan kurang dari atau sama dengan 20, jika suatu nilai memenuhi kondisi tersebut, nilai tersebut akan dicetak dan ditandai dengan (*) tanda tangan di akhir menggunakan ekspresi satu: $4 <= 20
  2. Kedua, ia memeriksa apakah bidang keempat dari setiap baris masukan lebih besar dari 20, dan jika suatu baris memenuhi kondisi, maka baris tersebut akan dicetak menggunakan ekspresi dua: $4 > 20

Namun ada satu masalah di sini, ketika ekspresi pertama dieksekusi, baris yang ingin kita tandai dicetak menggunakan: { printf "%s\t%s\n", $0, "**" ; } dan kemudian pada langkah yang sama, ekspresi kedua juga diperiksa yang menjadi faktor pemborosan waktu.

Jadi tidak perlu lagi mengeksekusi ekspresi kedua, $4 > 20 setelah mencetak baris yang sudah ditandai yang telah dicetak menggunakan ekspresi pertama.

Untuk mengatasi masalah ini, Anda harus menggunakan perintah next sebagai berikut:

# 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

Setelah satu baris masukan dicetak menggunakan $4 <= 20 { printf "%s\t%s\n", $0,"*" ; Berikutnya ; }, perintah next yang disertakan akan membantu melewati ekspresi kedua $4 > 20 { print $0 ;}, sehingga eksekusi dilanjutkan ke baris masukan berikutnya tanpa harus membuang waktu untuk memeriksa apakah jumlahnya lebih besar dari 20.

Perintah berikutnya sangat penting dalam menulis perintah yang efisien dan bila diperlukan, Anda selalu dapat menggunakannya untuk mempercepat eksekusi skrip. Bersiaplah untuk bagian selanjutnya dari rangkaian ini di mana kita akan melihat penggunaan masukan standar (STDIN) sebagai masukan untuk Awk.

Semoga panduan cara ini bermanfaat bagi Anda dan Anda dapat menuliskan pemikiran Anda seperti biasa dengan meninggalkan komentar di bagian komentar di bawah.