Kenyataan bersyarat dalam Awk
- 2006
- 151
- Clay Weber
Kenyataan bersyarat adalah salah satu ciri yang paling kuat dari AWK, yang membolehkan pengguna melaksanakan arahan yang berbeza berdasarkan nilai pembolehubah atau ekspresi. Ini membolehkan penciptaan logik kompleks dalam skrip AWK, dan memudahkan prestasi tugas pemprosesan teks canggih.
Dalam tutorial ini, kami akan merangkumi asas-asas penyata bersyarat dalam AWK, termasuk sintaks dan penggunaan pernyataan 'if-else'. Sebagai contoh:
- Kenyataan jika else dengan awk
- Pernyataan Tukar dengan Awk
- Pengendali ternary dengan awk
Pernyataan jika-else dengan awk
The 'jika tidak' pernyataan adalah pernyataan bersyarat asas di Awk. Ia membolehkan anda menentukan arahan yang berbeza untuk dilaksanakan berdasarkan keadaan tertentu. Sintaks untuk 'jika tidak' pernyataan adalah seperti berikut:
jika (keadaan) # perintah untuk melaksanakan jika keadaan adalah benar else # perintah untuk melaksanakan jika keadaan adalah palsu123456 | jika (keadaan) # perintah untuk melaksanakan jika keadaan adalah benar else # perintah untuk melaksanakan jika keadaan adalah palsu |
Di sini, 'Keadaan' adalah ungkapan boolean yang menilai sama ada benar atau salah. Sekiranya keadaan itu benar, perintah di dalam pendakap keriting berikut 'jika' dilaksanakan. Sekiranya keadaannya palsu, perintah di dalam pendakap keriting berikut 'Lain' dilaksanakan.
Contohnya, katakan kami mempunyai fail yang mengandungi senarai nombor, dan kami ingin mencetak nombor yang lebih besar dari 10. Kita boleh menggunakan 'jika tidak' pernyataan untuk menyelesaikan tugas ini seperti berikut:
AWK 'if ($ 1> 10) Print $ 1'.txt1 | AWK 'if ($ 1> 10) Print $ 1'.txt |
Di sini, The 'jika' penyata memeriksa sama ada bidang pertama ($ 1) lebih besar daripada 10. Sekiranya, nombornya dicetak. Sekiranya tidak, tidak ada yang berlaku.
Anda juga boleh menggunakan 'jika tidak' Penyata untuk melaksanakan tugas yang lebih kompleks. Sebagai contoh, katakan kami mempunyai fail yang mengandungi senarai nama pengguna dan umur mereka, dan kami ingin mencetak nama pengguna pengguna yang berusia lebih dari 18 tahun. Kita boleh menggunakan pernyataan 'if-else' untuk menyelesaikan tugas ini seperti berikut:
awk 'if ($ 2> 18) print $ 1 else print "pengguna tidak cukup lama"' Pengguna.txt1 | awk 'if ($ 2> 18) print $ 1 else print "pengguna tidak cukup lama"' Pengguna.txt |
Di sini, The 'jika' penyata memeriksa sama ada bidang kedua ($ 2) lebih besar daripada 18. Jika ada, nama pengguna dicetak. Sekiranya tidak, rentetan "Pengguna tidak cukup lama" dicetak.
Pernyataan Tukar dengan Awk
The 'Tukar' pernyataan dalam AWK membolehkan anda melaksanakan arahan yang berbeza berdasarkan pelbagai syarat. Ia memberikan cara yang lebih ringkas untuk menyatakan pelbagai 'jika tidak' pernyataan. Sintaks untuk 'Tukar' pernyataan adalah seperti berikut:
suis (variable) case value1: # perintah untuk melaksanakan jika variable == value1 break case value2: # perintah untuk melaksanakan jika variable == value2 break ... # perintah untuk melaksanakan jika tiada kes yang sepadan1234567891011 | suis (variable) case value1: # perintah untuk melaksanakan jika variable == value1 break case value2: # perintah untuk melaksanakan jika variable == value2 break ... lalai: # perintah untuk melaksanakan jika tiada kes sepadan |
Di sini, 'Pembolehubah' adalah pemboleh ubah atau ungkapan yang anda ingin bandingkan dengan nilai yang berbeza. 'Value1', 'Value2', dan lain-lain. adalah nilai yang berbeza yang anda mahu bandingkan. The 'rehat' pernyataan digunakan untuk keluar 'Tukar' penyataan selepas perlawanan dijumpai. The 'lalai' Kata kunci digunakan untuk menentukan arahan untuk melaksanakan jika tidak ada kes yang sepadan.
Contohnya, katakan kami mempunyai fail yang mengandungi senarai bahasa pengaturcaraan, dan kami ingin mencetak nama bahasa pengaturcaraan berdasarkan lanjutan fail. Kita boleh menggunakan 'Tukar' pernyataan untuk menyelesaikan tugas ini seperti berikut:
awk 'switch ($ nf) case "py": print "python"; rehat; kes "rb": cetak "ruby"; rehat; Kes "JS": Cetak "JavaScript"; rehat; Lalai: Cetak bahasa "tidak diketahui" '.txt1 | awk 'switch ($ nf) case "py": print "python"; rehat; kes "rb": cetak "ruby"; rehat; Kes "JS": Cetak "JavaScript"; rehat; Lalai: Cetak bahasa "tidak diketahui" '.txt |
Di sini, kami menggunakan 'Tukar' pernyataan untuk membandingkan medan terakhir ($ Nf) terhadap nilai yang berbeza ('py', 'rb', 'js'). Sekiranya nilai sepadan, kami mencetak nama bahasa pengaturcaraan. Sekiranya tidak sepadan, kami mencetak "Tidak diketahui".
Pengendali ternary dengan awk
The 'Pengendali Ternary' dalam Awk adalah versi tersendiri dari 'jika tidak' penyata. Ia membolehkan anda melakukan operasi if-else yang mudah dalam satu baris. Sintaks untuk pengendali ternary adalah seperti berikut:
(keadaan) ? nilai sejati: nilai palsu1 | (keadaan) ? nilai sejati: nilai palsu |
Di sini, 'Keadaan'adalah ungkapan boolean yang ingin anda menilai. 'nilai sejati' adalah nilai untuk kembali jika keadaan itu benar. 'nilai palsu' adalah nilai untuk kembali jika keadaan itu salah.
Contohnya, katakan kami mempunyai fail yang mengandungi senarai nombor, dan kami mahu mencetak "Malah" Sekiranya nombornya juga, dan "Ganjil" Sekiranya nombornya ganjil. Kita boleh menggunakan pengendali ternary untuk menyelesaikan tugas ini seperti berikut:
awk 'print ($ 1 % 2 == 0) ? Nombor ":" ganjil " '.txt1 | awk 'print ($ 1 % 2 == 0) ? Nombor ":" ganjil " '.txt |
Di sini, kami menggunakan pengendali ternary untuk memeriksa sama ada nombor di medan pertama ($ 1) sama atau ganjil. Sekiranya walaupun, kami mencetak "Malah". Sekiranya ia ganjil, kami mencetak "Ganjil".
Kesimpulan
Kesimpulannya, pernyataan bersyarat adalah ciri kuat AWK yang membolehkan pengguna melakukan tugas pemprosesan teks canggih. The 'jika tidak' pernyataan adalah pernyataan bersyarat asas yang membolehkan anda melaksanakan perintah yang berbeza berdasarkan keadaan tertentu. Dengan menguasai 'jika tidak' pernyataan dan pernyataan bersyarat yang lain, anda boleh menjadi lebih berkesan dan efisien dalam skrip awk anda, dan menyelesaikan tugas pemprosesan teks yang rumit dengan mudah.