Artikel ini adalah bagian dari seri Contoh Tutorial Awk yang sedang berlangsung. Dalam artikel awk kami sebelumnya, kami membahas tentang awk print, variabel yang ditentukan pengguna awk, variabel bawaan awk, dan operator awk.
Dalam tutorial awk ini, mari kita tinjau pernyataan if bersyarat awk dengan contoh praktis.
Awk mendukung banyak pernyataan bersyarat untuk mengontrol aliran program. Sebagian besar sintaks pernyataan kondisional Awk terlihat seperti bahasa pemrograman 'C'.
Biasanya pernyataan bersyarat memeriksa kondisi, sebelum melakukan tindakan apa pun. Jika kondisinya benar, tindakan dilakukan. Demikian pula tindakan dapat dilakukan jika kondisinya salah.
Pernyataan bersyarat dimulai dengan kata kunci yang disebut 'jika'. Awk mendukung dua jenis pernyataan if yang berbeda.
- Pernyataan Awk Simple If
- Pernyataan Awk If-Else
- Awk If-ElseIf-Ladder
Pernyataan Awk Simple If
Tindakan Tunggal: Pernyataan Simple If digunakan untuk memeriksa kondisi, jika kondisi mengembalikan true, ia melakukan tindakan yang sesuai.
Syntax: if (conditional-expression) action
- jika adalah kata kunci
- ekspresi kondisional – ekspresi untuk memeriksa kondisi
- aksi – pernyataan awk untuk melakukan tindakan.
Beberapa Tindakan: Jika ekspresi kondisional mengembalikan nilai true, maka tindakan akan dilakukan. Jika lebih dari satu tindakan perlu dilakukan, tindakan harus diapit dalam kurung kurawal, memisahkannya menjadi baris atau titik koma baru seperti yang ditunjukkan di bawah ini.
Syntax: if (conditional-expression) { action1; action2; }
Jika kondisinya benar, semua tindakan yang terlampir dalam kurung kurawal akan dilakukan dalam urutan yang diberikan. Setelah semua tindakan dilakukan, ia melanjutkan untuk mengeksekusi pernyataan berikutnya.
Pernyataan Awk If Else
Dalam pernyataan if awk sederhana di atas, tidak ada serangkaian tindakan jika kondisinya salah. Dalam pernyataan awk If Else Anda dapat memberikan daftar tindakan yang harus dilakukan jika kondisinya salah. Jika kondisi mengembalikan true, tindakan 1 akan dilakukan, jika kondisinya salah, tindakan 2 akan dilakukan.
Syntax: if (conditional-expression) action1 else action2
Awk juga memiliki operator bersyarat yaitu operator ternary ( ?:) yang fiturnya mirip dengan pernyataan If Else awk. Jika ekspresi bersyarat benar, tindakan1 akan dilakukan dan jika ekspresi bersyarat salah, tindakan2 akan dilakukan.
Syntax: conditional-expression ? action1 : action2 ;
Awk Jika Lain Jika tangga
if(conditional-expression1) action1; else if(conditional-expression2) action2; else if(conditional-expression3) action3; . . else action n;
- Jika ekspresi bersyarat1 benar, maka tindakan1 akan dilakukan.
- Jika conditional-expression1 salah maka conditional-expression2 akan diperiksa, jika true, action2 akan dilakukan dan berlangsung seperti ini. Bagian lain terakhir akan dilakukan jika tidak ada ekspresi kondisional yang benar.
Sekarang mari kita buat file input sampel yang memiliki nilai siswa.
$cat student-marks Jones 2143 78 84 77 Gondrol 2321 56 58 45 RinRao 2122 38 37 Edwin 2537 87 97 95 Dayan 2415 30 47
1. Awk If Contoh:Periksa semua tanda ada
$ awk '{ if ($3 =="" || $4 == "" || $5 == "") print "Some score for the student",$1,"is missing";' }' student-marks Some score for the student RinRao is missing Some score for the student Dayan is missing
$3, $4 dan $5 adalah nilai ujian siswa. Jika skor tes sama dengan kosong, itu melempar pesan. || operator adalah untuk memeriksa salah satu tanda tidak ada, itu harus waspada.
2. Awk If Else Contoh:Buat Laporan Lulus/Gagal berdasarkan nilai Siswa di setiap mata pelajaran
$ awk '{ if ($3 >=35 && $4 >= 35 && $5 >= 35) print $0,"=>","Pass"; else print $0,"=>","Fail"; }' student-marks Jones 2143 78 84 77 => Pass Gondrol 2321 56 58 45 => Pass RinRao 2122 38 37 => Fail Edwin 2537 87 97 95 => Pass Dayan 2415 30 47 => Fail
Syarat Lulus adalah semua nilai ujian harus lebih besar atau sama dengan 35. Jadi semua nilai ujian diperiksa jika lebih besar dari 35, maka ia mencetak seluruh baris dan string "Lulus", yang lain yaitu bahkan jika salah satu dari skor tes tidak memenuhi syarat, ia mencetak seluruh baris dan mencetak string “Gagal”.
3. Awk If Else If Contoh:Temukan rata-rata dan nilai untuk setiap siswa
$ cat grade.awk { total=$3+$4+$5; avg=total/3; if ( avg >= 90 ) grade="A"; else if ( avg >= 80) grade ="B"; else if (avg >= 70) grade ="C"; else grade="D"; print $0,"=>",grade; } $ awk -f grade.awk student-marks Jones 2143 78 84 77 => C Gondrol 2321 56 58 45 => D RinRao 2122 38 37 => D Edwin 2537 87 97 95 => A Dayan 2415 30 47 => D
Dalam skrip awk di atas, variabel yang disebut 'avg' memiliki rata-rata dari tiga nilai tes. Jika rata-rata lebih besar atau sama dengan 90, maka nilainya adalah A, atau jika rata-rata lebih besar atau sama dengan 80 maka nilainya adalah B, jika rata-rata lebih besar atau sama dengan 70, maka nilainya adalah C. Atau kalau tidak, nilainya D.
4. Awk Ternary ( ?:) Contoh:Gabungkan setiap 3 baris input dengan koma.
$ awk 'ORS=NR%3?",":"\n"' student-marks Jones 2143 78 84 77,Gondrol 2321 56 58 45,RinRao 2122 38 37 Edwin 2537 87 97 95,Dayan 2415 30 47,
Kami membahas tentang variabel bawaan awk ORS sebelumnya. Variabel ini ditambahkan setelah setiap baris yang mendapatkan output. Dalam contoh ini, itu akan diubah pada setiap baris ke-3 dari koma ke baris baru. Untuk baris 1, 2 adalah koma, untuk baris 3 adalah baris baru, untuk baris 4, 5 adalah koma, untuk baris 6 adalah baris baru, dst.
Bacaan yang Disarankan
Sed dan Awk 101 Hacks, oleh Ramesh Natarajan . Saya menghabiskan beberapa jam sehari di lingkungan UNIX / Linux yang berurusan dengan file teks (data, konfigurasi, dan file log). Saya menggunakan Sed dan Awk untuk semua pekerjaan manipulasi teks saya. Berdasarkan pengalaman Sed dan Awk saya, saya telah menulis eBook Sed dan Awk 101 Hacks yang berisi 101 contoh praktis tentang berbagai fitur canggih Sed dan Awk yang akan meningkatkan kehidupan UNIX / Linux Anda. Bahkan jika Anda telah menggunakan Sed dan Awk selama beberapa tahun dan belum membaca buku ini, bantulah diri Anda sendiri dan baca buku ini. Anda akan kagum dengan kemampuan utilitas Sed dan Awk.