Cara menggunakan AWK untuk memfilter teks atau string menggunakan tindakan spesifik pola

Cara menggunakan AWK untuk memfilter teks atau string menggunakan tindakan spesifik pola

Di bagian ketiga dari seri perintah awk, kita akan melihat teks penyaringan atau string berdasarkan pola spesifik yang dapat didefinisikan oleh 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 ini dengan AWK sangat mudah, ini adalah salah satu fitur hebat dari AWK yang akan Anda temukan bermanfaat.

Mari kita lihat contoh di bawah ini, katakanlah Anda memiliki daftar belanja untuk barang makanan yang ingin Anda beli, disebut food_prices.daftar. Ini memiliki daftar barang makanan berikut dan harganya.

$ Cat food_prices.daftar  No Item_Name Harga Kuantitas 1 Mangga 10 $ 2.45 2 apel 20 $ 1.50 3 pisang 5 $ 0.90 4 Nanas 10 $ 3.46 5 jeruk 10 $ 0.78 6 tomat 5 $ 0.55 7 bawang 5 $ 0.45 

Dan kemudian, Anda ingin menunjukkan a (*) Masuk pada makanan yang harganya lebih besar dari $ 2, 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.daftar 
Cetak item yang harganya lebih besar dari $ 2

Dari output di atas, Anda dapat melihat bahwa ada a (*) Masuk di akhir garis yang memiliki makanan, mangga Dan nanas. Jika Anda memeriksa harganya, mereka di atas $ 2.

Dalam contoh ini, kami telah menggunakan dua pola:

  1. pertama: / *\ $ [2-9] \.[0-9] [0-9] */ Mendapat garis yang memiliki harga item makanan lebih besar dari $ 2 Dan
  2. kedua: /*\ $ [0-1] \.[0-9] [0-9] */ Mencari jalur dengan harga item makanan kurang dari $ 2.

Inilah yang terjadi, ada empat bidang dalam file, ketika pola seseorang bertemu dengan harga makanan yang lebih besar dari $ 2, itu mencetak keempat bidang dan a (*) Masuk di akhir garis sebagai bendera.

Pola kedua hanya mencetak garis lain dengan harga makanan kurang dari $ 2 karena mereka muncul di file input, food_prices.daftar.

Dengan cara ini Anda dapat menggunakan tindakan spesifik pola untuk menyaring item makanan yang dihargai di atas $ 2, Meskipun ada masalah dengan output, garis yang memiliki (*) Tanda tidak diformat seperti garis lainnya membuat output tidak cukup jelas.

Kami melihat masalah yang sama di bagian 2 dari seri AWK, tetapi kami dapat menyelesaikannya dalam dua cara:

1. Menggunakan printf Perintah yang merupakan cara 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.daftar 
Filter dan cetak item menggunakan AWK dan printf

2. Menggunakan $ 0 bidang. AWK menggunakan variabel 0 untuk menyimpan seluruh baris input. Ini berguna untuk menyelesaikan masalah di atas dan sederhana dan secepat berikut:

$ awk '/ *$ [2-9] \.[0-9] [0-9] */ print $ 0 " *";  / *$ [0-1] \.[0-9] [0-9] */ print;  food_prices.daftar 
Filter dan cetak item menggunakan AWK dan variabel

Kesimpulan

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

Semoga Anda menemukan artikel ini bermanfaat dan ingat untuk membaca bagian selanjutnya dari seri yang akan fokus pada penggunaan operator perbandingan menggunakan AWK Tool.