Cara menggunakan AWK untuk menapis teks atau rentetan menggunakan tindakan khusus corak

Cara menggunakan AWK untuk menapis teks atau rentetan menggunakan tindakan khusus corak

Di bahagian ketiga siri perintah awk, kita akan melihat penapisan teks atau rentetan berdasarkan corak tertentu yang dapat ditentukan oleh pengguna.

Kadang -kadang, semasa menapis teks, anda ingin menunjukkan baris tertentu dari fail input atau garis rentetan berdasarkan keadaan tertentu atau menggunakan corak tertentu yang dapat dipadankan. Melakukan ini dengan Awk sangat mudah, ia adalah salah satu ciri hebat Awk bahawa anda akan dapat membantu.

Mari kita lihat contoh di bawah, katakan anda mempunyai senarai membeli -belah untuk barangan makanan yang anda mahu beli, yang dipanggil Food_prices.senarai. Ia mempunyai senarai makanan berikut dan harga mereka.

$ Cat Food_prices.senarai  Tiada Harga Kuantiti Item_NAME 1 mangga 10 $ 2.45 2 epal 20 $ 1.50 3 pisang 5 $ 0.90 4 nanas 10 $ 3.46 5 oren 10 $ 0.78 6 Tomato 5 $ 0.55 7 Bawang 5 $ 0.45 

Dan kemudian, anda ingin menunjukkan a (*) menandatangani barang makanan yang harganya lebih besar daripada $ 2, Ini boleh dilakukan dengan menjalankan arahan berikut:

$ awk '/ *$ [2-9] \.[0-9] [0-9] */ Print $ 1, $ 2, $ 3, $ 4, " *";  / *$ [0-1] \.[0-9] [0-9] */ print;  'Food_prices.senarai 
Cetak item yang harganya lebih besar daripada $ 2

Dari output di atas, anda dapat melihat bahawa ada (*) Tandatangan di hujung baris mempunyai makanan, Mangga dan nanas. Sekiranya anda memeriksa harga mereka, mereka berada di atas $ 2.

Dalam contoh ini, kami telah menggunakan dua corak:

  1. yang pertama: / *\ $ [2-9] \.[0-9] [0-9] */ mendapat garis yang mempunyai harga item makanan lebih besar daripada $ 2 dan
  2. yang kedua: /*\ $ [0-1] \.[0-9] [0-9] */ Cari garis dengan harga item makanan kurang dari $ 2.

Inilah yang berlaku, terdapat empat bidang dalam fail, apabila corak seseorang menemui garis dengan harga item makanan lebih besar daripada $ 2, ia mencetak semua empat bidang dan a (*) Tandatangan di hujung baris sebagai bendera.

Corak kedua hanya mencetak garis lain dengan harga makanan kurang dari $ 2 Seperti yang muncul dalam fail input, Food_prices.senarai.

Dengan cara ini, anda boleh menggunakan tindakan khusus corak untuk menapis barang makanan yang berharga di atas $ 2, Walaupun ada masalah dengan output, garis yang mempunyai (*) Tanda tidak diformatkan seperti selebihnya yang membuat output tidak cukup jelas.

Kami melihat masalah yang sama dalam bahagian 2 siri AWK, tetapi kami dapat menyelesaikannya dalam dua cara:

1. Menggunakan printf Perintah yang merupakan cara yang panjang dan membosankan menggunakan arahan di bawah:

$ 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.senarai 
Tapis dan cetak item menggunakan awk dan printf

2. Menggunakan $ 0 medan. Awk menggunakan pembolehubah 0 Untuk menyimpan keseluruhan talian input. Ini berguna untuk menyelesaikan masalah di atas dan mudah dan pantas seperti berikut:

$ awk '/ *$ [2-9] \.[0-9] [0-9] */ Print $ 0 " *";  / *$ [0-1] \.[0-9] [0-9] */ print;  'Food_prices.senarai 
Tapis dan cetak item menggunakan AWK dan pemboleh ubah

Kesimpulan

Itu sahaja buat masa ini dan ini adalah cara mudah untuk menapis teks menggunakan tindakan khusus corak yang dapat membantu dalam menandakan garis teks atau rentetan dalam fail menggunakan Awk perintah.

Harap anda dapati artikel ini membantu dan ingat untuk membaca bahagian seterusnya siri yang akan memberi tumpuan kepada menggunakan pengendali perbandingan menggunakan alat AWK.