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:
- yang pertama:
/ *\$[2-9]\.[0-9][0-9] */
mendapatkan baris yang memiliki harga item makanan lebih besar dari $2 dan - 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.