Soal 1Kapan body dari BEGIN { ... } dijalankan?
awk — Agregasi dan Laporan
Praktik awk: urutan BEGIN { } dan END { } dijalankan, s += $1 untuk mengakumulasi kolom 1 menjadi total, dan menghitung dengan NR atau { c++ } untuk membangun laporan agregasi — divisualisasikan dan bisa langsung dicoba di terminal browser.
Berjalan Sebelum dan Sesudah — BEGIN dan END
awk memproses setiap baris secara berurutan, namun kamu bisa menempatkan pekerjaan yang ingin dijalankan sekali sebelum dan sesudah ke dalam BEGIN { ... } dan END { ... }. BEGIN dijalankan sekali sebelum baris pertama dibaca, dan END dijalankan sekali setelah semua baris selesai dibaca. Gunakan keduanya untuk mencetak header di awal atau mencetak ringkasan di akhir.
BEGIN dijalankan sekali sebelum pemrosesan, body dijalankan per baris, dan END dijalankan sekali setelah semua baris.| Bentuk | Arti |
|---|---|
BEGIN { ... } | Dijalankan sekali sebelum baris pertama dibaca |
{ ... } | Body yang dijalankan berulang kali, satu baris setiap kali |
END { ... } | Dijalankan sekali setelah semua baris selesai dibaca |
s += $1 | Terus menambahkan kolom 1 ke variabel s (total kumulatif) |
NR | Jumlah baris yang sudah dibaca (total jumlah baris di akhir) |
{ c++ } END { print c } | Menambah c per baris dan mencetak hitungan di akhir |
printf 'start\nmiddle\nend\n' > lines.txt # buat 3 baris materi
awk 'BEGIN { print "--- report ---" } { print $0 } END { print "rows:", NR }' lines.txt
# header di awal, rows: 3 di akhir
Total dan Hitungan — s += $1 dan NR
Di awk kamu bisa menggunakan variabel tanpa mendeklarasikannya, dan angka langsung bisa dijumlahkan. Menulis { s += $1 } di body terus menambahkan kolom pertama setiap baris ke variabel s, dan END { print s } mencetak total di akhir. Untuk hitungan, cetak NR (jumlah baris yang dibaca) langsung di END, atau tambahkan penghitung dengan { c++ } dan cetak dengan END { print c }. Dengan ini kamu bisa membangun laporan agregasi seperti total penjualan atau jumlah record.
s += $1 menambahkan kolom 1 baris per baris, dan END mencetak total 60.printf '120 mon\n80 tue\n200 wed\n' > sales.txt # buat 3 baris dengan angka
awk '{ s += $1 } END { print "total:", s }' sales.txt # total: 400
awk 'END { print "days:", NR }' sales.txt # days: 3
Menghitung dengan Penghitung — { c++ } END { print c }
NR menghitung setiap baris, namun ketika kamu ingin menghitung hanya baris yang memenuhi kondisi tertentu, gunakan penghitung di body. { c++ } menambah variabel c sebesar 1 untuk setiap baris yang dibaca, dan END { print c } mencetak hitungan tersebut. Menambahkan pola seperti /pat/{ c++ } menghitung hanya baris yang mengandung string tertentu.
/pass/{ c++ } menambah c hanya pada baris yang cocok, dan END mencetak hitungan 2.| Bentuk | Arti |
|---|---|
{ c++ } | Tambah variabel c sebesar 1 untuk setiap baris yang dibaca |
/pattern/{ c++ } | Tambah c hanya pada baris yang mengandung pattern |
END { print c } | Cetak hitungan c sekali di akhir |
printf 'ok pay\nng pay\nok ship\n' > log.txt # buat 3 baris dengan status
awk '/ok/{ c++ } END { print "ok count:", c }' log.txt # hitung baris yang mengandung ok -> 2
Cek Pemahaman
Jawab setiap pertanyaan satu per satu.
Soal 2Apa yang ditampilkan oleh awk '{ s += $1 } END { print s }' f?
Soal 3Apa yang muncul ketika kamu mencetak NR di blok END?