Cara Menggunakan Awk untuk Memfilter Teks atau String Menggunakan Tindakan Khusus Pola


Di bagian ketiga dari rangkaian perintah Awk, kita akan melihat pemfilteran teks atau string berdasarkan pola spesifik yang dapat ditentukan pengguna.

Terkadang, saat memfilter teks, Anda ingin menunjukkan baris tertentu dari file input atau baris string berdasarkan kondisi tertentu atau menggunakan pola tertentu yang dapat dicocokkan. Melakukan hal ini dengan Awk sangatlah mudah, ini adalah salah satu fitur hebat dari Awk yang menurut Anda berguna.

Mari kita lihat contoh di bawah ini, misalkan Anda memiliki daftar belanja bahan makanan yang ingin Anda beli, yang disebut food_prices.list. Ini memiliki daftar item makanan berikut dan harganya.

$ cat food_prices.list 
No	Item_Name		Quantity	Price
1	Mangoes			   10		$2.45
2	Apples			   20		$1.50
3	Bananas			   5		$0.90
4	Pineapples		   10		$3.46
5	Oranges			   10		$0.78
6	Tomatoes		   5		$0.55
7	Onions			   5            $0.45

Lalu, Anda ingin memberi tanda (*) pada item makanan yang harganya lebih besar dari $2, hal ini dapat dilakukan dengan menjalankan perintah berikut:

awk '/ *$[2-9]\.[0-9][0-9] */ { print $1, $2, $3, $4, "*" ; } / *$[0-1]\.[0-9][0-9] */ { print ; }' food_prices.list

Dari keluaran di atas, Anda dapat melihat bahwa terdapat tanda (*) di akhir baris yang memuat item makanan, mangga dan nanas . Jika Anda memeriksa harganya, harganya di atas $2.

Dalam contoh ini, kami menggunakan dua pola:

  1. yang pertama: / *\$[2-9]\.[0-9][0-9] */ mendapatkan baris yang memiliki harga item makanan lebih besar dari $2 dan
  2. yang kedua: /*\$[0-1]\.[0-9][0-9] */ mencari baris dengan harga makanan kurang dari $2 .

Inilah yang terjadi, ada empat field dalam file, ketika pola satu menemukan garis dengan harga item makanan lebih besar dari $2, pola tersebut akan mencetak keempat field tersebut dan sebuah (*) tanda tangan di akhir baris sebagai bendera.

Pola kedua hanya mencetak baris lain dengan harga pangan kurang dari $2 seperti yang muncul di file masukan, food_prices.list.

Dengan cara ini Anda dapat menggunakan tindakan pola tertentu untuk memfilter item makanan yang harganya di atas $2, meskipun ada masalah dengan outputnya, baris yang memiliki (*) tanda tidak diformat seperti baris lainnya sehingga keluarannya tidak cukup jelas.

Kita melihat masalah yang sama di Bagian 2 dari seri awk, namun kita dapat menyelesaikannya dengan dua cara:

1. Menggunakan perintah printf yang merupakan cara yang panjang dan membosankan menggunakan perintah di bawah ini:

awk '/ *$[2-9]\.[0-9][0-9] */ { printf "%-10s %-10s %-10s %-10s\n", $1, $2, $3, $4 "*" ; } / *$[0-1]\.[0-9][0-9] */ { printf "%-10s %-10s %-10s %-10s\n", $1, $2, $3, $4; }' food_prices.list 

2. Menggunakan bidang $0. Awk menggunakan variabel 0 untuk menyimpan seluruh baris masukan. Ini berguna untuk memecahkan masalah di atas dan sederhana serta cepat sebagai berikut:

awk '/ *$[2-9]\.[0-9][0-9] */ { print $0 "*" ; } / *$[0-1]\.[0-9][0-9] */ { print ; }' food_prices.list 

Kesimpulan

Itu saja untuk saat ini dan ini adalah cara sederhana untuk memfilter teks menggunakan tindakan pola tertentu yang dapat membantu menandai baris teks atau string dalam file menggunakan perintah Awk.

Semoga artikel ini bermanfaat bagi Anda dan ingatlah untuk membaca bagian selanjutnya dari seri ini yang akan fokus pada penggunaan operator perbandingan menggunakan alat awk.