Belajar dengan membaca secara berurutan

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.

Urutan BEGIN dan END dijalankan
BEGIN { ... }sekali sebelum membacacetak header lebih dulu{ body }berulang per barissatu baris setiap kaliEND { ... }sekali setelah semua bariscetak total atau hitungan
BEGIN dijalankan sekali sebelum pemrosesan, body dijalankan per baris, dan END dijalankan sekali setelah semua baris.
BentukArti
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 += $1Terus menambahkan kolom 1 ke variabel s (total kumulatif)
NRJumlah 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

① Buat file materi 3 baris dengan printf 'apple\nbanana\ncherry\n' > fruits.txt.

② Periksa isinya dengan cat fruits.txt.

③ Menggunakan awk, cetak satu baris header di BEGIN, cetak setiap baris apa adanya di body, dan cetak total jumlah baris sekali di END menggunakan NR.

④ Periksa bahwa header ada di atas, 3 baris ada di tengah, dan jumlah baris ada di akhir. (Jika kamu menjalankannya dengan benar, penjelasan akan muncul.)

Linux console
0 / 3 selesai
Loading Linux Terminal...

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.

Akumulasi kolom 1 menjadi total
10 apple20 banana30 cherrys += $1 -> s=10s += $1 -> s=30END print s -> 60
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

① Buat 3 baris dengan angka menggunakan printf '50 a\n70 b\n30 c\n' > nums.txt.

② Periksa isinya dengan cat nums.txt.

③ Di body awk, terus tambahkan kolom 1 ke sebuah variabel, dan cetak totalnya sekali di END.

④ Kemudian, di END dari awk, gunakan NR untuk mencetak jumlah baris (jumlah record).

⑤ Periksa bahwa total dan hitungan tampil di layar.

Linux console
0 / 4 selesai
Loading Linux Terminal...

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.

Hitung hanya baris yang cocok dengan penghitung
pass xfail ypass z/pass/ c++ -> c=1fail -> tidak dihitungEND print c -> 2
/pass/{ c++ } menambah c hanya pada baris yang cocok, dan END mencetak hitungan 2.
BentukArti
{ 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

① Buat 3 baris dengan status menggunakan printf 'pass x\nfail y\npass z\n' > result.txt.

② Periksa isinya dengan cat result.txt.

③ Dengan awk, tambahkan penghitung hanya pada baris yang mengandung pass, dan cetak hitungan tersebut sekali di END.

④ Periksa bahwa hitungan yang tampil sesuai dengan jumlah baris yang mengandung pass.

⑤ Pada result.txt yang sama, jalankan awk 'END { print NR }' result.txt (total baris) dan awk '/pass/{ c++ } END { print "pass count:", c }' result.txt (hitungan yang cocok) dan bandingkan perbedaannya.

Linux console
0 / 4 selesai
Loading Linux Terminal...
QUIZ

Cek Pemahaman

Jawab setiap pertanyaan satu per satu.

Soal 1Kapan body dari BEGIN { ... } dijalankan?

Soal 2Apa yang ditampilkan oleh awk '{ s += $1 } END { print s }' f?

Soal 3Apa yang muncul ketika kamu mencetak NR di blok END?