Apabila menapis teks, kadangkala anda mungkin ingin menandai baris tertentu dalam fail atau rentetan berdasarkan keadaan tertentu atau menggunakan corak tertentu yang boleh dipadankan. Sangat mudah untuk menyelesaikan tugas ini menggunakan awk, dan ini adalah salah satu daripada beberapa ciri awk yang boleh membantu anda.
Mari kita lihat contoh berikut Katakan anda mempunyai senarai beli-belah dengan makanan yang anda ingin beli. Nama makanan dan harga yang sepadan adalah seperti berikut
$ harga_makanan kucing.senarai No Item_Nama Kuantiti Harga 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 Biji Tomato 5 $0.55Kemudian, anda ingin menggunakan simbol (*) untuk menandakan makanan tersebut dengan harga seunit lebih daripada $2, maka anda boleh melakukannya dengan menjalankan arahan berikut:
$ awk '/ */$[2-9]/.[0-9][0-9] */ { print $1, $2, $3, $4, "*" } / */$[0-1 ]/.[0-9][0-9] */ { print ; }' food_price.list
Cetak item dengan harga seunit melebihi $2
Daripada output di atas anda boleh lihat terdapat tanda (*) di hujung barisan yang mengandungi mangga dan nanas. Jika anda menyemak harga mereka seunit, anda boleh melihat bahawa mereka sememangnya melebihi $2 seunit.
Dalam contoh ini, kami telah menggunakan dua mod:
Corak pertama: / */$[2-9]/.[0-9][0-9] */ akan mendapat baris yang mengandungi makanan dengan harga seunit lebih daripada $2.
Corak kedua: /*/$[0-1]/.[0-9][0-9] */ akan menemui baris dengan harga unit makanan kurang daripada $2.
Apakah sebenarnya yang dilakukan oleh arahan di atas? Fail ini mempunyai empat medan Apabila corak sepadan dengan garis yang mengandungi harga seunit makanan lebih daripada $2, ia akan mengeluarkan keempat-empat medan dan menandakan garisan dengan simbol (*) di hujung.
Mod kedua hanya mengeluarkan baris lain yang mengandungi makanan dengan harga unit kurang daripada $2, seperti yang dipaparkan dalam fail input food_price.list.
Dengan cara ini anda boleh menggunakan corak untuk menapis barangan makanan yang berharga lebih daripada $2 Walaupun terdapat masalah dengan output di atas, garisan dengan simbol (*) tidak diformat seperti baris lain, yang menjadikan output. kelihatan Tidak cukup jelas.
Kami juga melihat masalah yang sama dalam bahagian kedua siri awk, tetapi kami boleh menyelesaikannya dengan dua cara berikut:
1 Anda boleh menggunakan arahan printf seperti berikut, tetapi ia panjang dan membosankan:
$ 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_price.list
Gunakan Awk dan Printf untuk menapis dan mengeluarkan projek
2. Gunakan medan $0. Awk menggunakan pembolehubah
0 untuk menyimpan keseluruhan baris input. Kaedah ini sangat mudah untuk masalah di atas, dan ia juga mudah dan cepat:
$ awk '/ */$[2-9]/.[0-9][0-9] */ { print $0 "*" } / */$[0-1]/.[0-9 ][0-9] */ { print ; }' food_price.list
Gunakan Awk dan pembolehubah untuk menapis dan mengeluarkan item
Kesimpulan
Itu sahaja, menggunakan arahan awk anda boleh menggunakan padanan corak untuk menapis teks dalam beberapa cara mudah, membantu anda menandai baris teks atau rentetan tertentu dalam fail.Atas ialah kandungan terperinci Kaedah penapisan corak untuk teks atau rentetan menggunakan awk. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!