0Pricing
DevOps Bootcamp · Pelajaran

Pola, Rentang, dan Blok BEGIN/END

Saring record dengan pola kondisional, lalu hasilkan header dan total menggunakan blok BEGIN dan END.

Pola, Rentang, dan Blok BEGIN/END adalah pelajaran DevOps Bootcamp gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar DevOps Bootcamp, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus DevOps Bootcamp mencakup 4 pelajaran total.

Apa Itu Pola awk?

Dalam awk, sebuah pola adalah kondisi yang mengendalikan apakah blok tindakan dijalankan untuk baris masukan tertentu. Bentuk umumnya adalah:

awk 'pattern { action }' file

Jika pola cocok dengan rekaman saat ini, tindakan dijalankan. Jika tidak ada tindakan yang diberikan, awk secara default mencetak seluruh baris. Pola dapat berupa:

  • Ekspresi reguler — /regex/
  • Ekspresi relasional — $3 > 100
  • Ekspresi gabungan — $1 == "ERROR" && $4 > 500
  • Pola rentang — /start/,/end/
  • Pola khusus — BEGIN dan END

Memahami pola merupakan langkah awal untuk menggunakan awk sebagai penyaring data yang andal, bukan sekadar pencetak kolom.

Pola Ekspresi Reguler untuk Menyaring Baris

Jenis pola yang paling umum adalah ekspresi reguler yang diapit garis miring. awk menguji setiap baris terhadap ekspresi reguler tersebut dan menjalankan tindakan hanya pada baris yang cocok.

Di bawah ini kita menyaring berkas bergaya /var/log/syslog untuk menampilkan hanya baris yang mengandung kata ERROR:

#!/usr/bin/env bash
# Simulate a log file and filter ERROR lines
log=$(cat <<'EOF'
2026-06-11 08:01:22 INFO  service started
2026-06-11 08:02:05 ERROR disk quota exceeded on /dev/sda1
2026-06-11 08:02:44 WARN  memory usage at 80%
2026-06-11 08:03:10 ERROR connection timeout to 10.0.0.5
2026-06-11 08:03:55 INFO  backup completed
EOF
)

echo "=== ERROR lines only ==="
echo "$log" | awk '/ERROR/ { print NR": "$0 }'

Pola Negasi dan Gabungan

Awali pola ekspresi reguler dengan ! untuk membaliknya — sehingga yang cocok adalah baris yang tidak mengandung pola tersebut. Gabungkan beberapa kondisi dengan && (AND) atau || (OR) untuk kendali yang lebih terperinci.

  • !/DEBUG/ — lewati baris debug
  • $3 > 500 && $5 == "POST" — permintaan POST berukuran besar
  • /WARN/ || /ERROR/ — salah satu tingkat keparahan

Contoh di bawah ini mengurai catatan akses sederhana dan hanya mencetak permintaan POST dengan ukuran respons di atas 1000 byte:

#!/usr/bin/env bash
access=$(cat <<'EOF'
10.0.0.1 GET  /api/ping     200  48
10.0.0.2 POST /api/upload   201  2048
10.0.0.3 GET  /api/users    200  512
10.0.0.4 POST /api/data     200  3500
10.0.0.5 POST /api/health   200  60
EOF
)

echo "Large POST requests (>1000 bytes):"
echo "$access" | awk '$2 == "POST" && $5 > 1000 { print $1, $3, "size="$5 }'

Pola Rentang: /start/,/end/

Sebuah pola rentang memilih blok rekaman yang berurutan — mulai dari baris yang cocok dengan /start/ hingga baris yang cocok dengan /end/, termasuk keduanya. Sintaksnya adalah:

awk '/start/,/end/ { action }' file

Perilaku penting yang perlu diketahui:

  • Rentang aktif pada baris pertama yang cocok dengan /start/ dan menjadi tidak aktif setelah baris berikutnya yang pertama kali cocok dengan /end/.
  • Jika /end/ tidak pernah cocok, rentang tetap aktif hingga EOF.
  • Beberapa rentang yang tidak saling tumpang tindih dalam berkas yang sama diproses secara terpisah.

Dengan demikian, pola rentang sangat cocok untuk mengekstrak bagian bertanda dari berkas konfigurasi, catatan dengan tajuk pembatas, atau laporan yang terdiri atas beberapa blok.

Mengekstrak Bagian dengan Pola Rentang

Bayangkan konfigurasi server yang memiliki beberapa bagian bernama, masing-masing dibatasi oleh tajuk [section]. Kita hanya menginginkan baris di dalam [database]:

#!/usr/bin/env bash
config=$(cat <<'EOF'
[server]
host = 0.0.0.0
port = 8080

[database]
host = 127.0.0.1
port = 5432
name = appdb
user = admin

[cache]
host = 127.0.0.1
port = 6379
EOF
)

echo "=== [database] section ==="
echo "$config" | awk '/\[database\]/,/^\[/' \
  | awk 'NR > 1 && !/^\[/ && NF'

Blok BEGIN

Blok BEGIN dijalankan satu kali sebelum masukan apa pun dibaca. Blok ini ideal untuk:

  • Mencetak tajuk laporan
  • Menginisialisasi variabel dan penghitung
  • Menetapkan pemisah bidang (FS) atau variabel bawaan lainnya
  • Menjalankan program awk mandiri yang tidak memerlukan masukan

Sintaks:

awk 'BEGIN { setup } pattern { action }' file

Menetapkan FS dalam BEGIN merupakan alternatif yang lebih rapi daripada tanda -F — khususnya berguna saat menulis program dengan beberapa aturan, ketika logika pemisah berada di dalam skrip.

#!/usr/bin/env bash
csv=$(cat <<'EOF'
alice,engineering,95000
bob,marketing,72000
carol,engineering,105000
dave,hr,68000
EOF
)

echo "$csv" | awk 'BEGIN {
  FS = ","
  printf "%-10s %-15s %10s\n", "Name", "Department", "Salary"
  print "--------------------------------------------"
}'

Blok END

Blok END dijalankan satu kali setelah rekaman terakhir diproses. Blok ini merupakan tempat yang tepat untuk:

  • Mencetak total, rata-rata, dan ringkasan yang dikumpulkan selama pemrosesan
  • Mengosongkan penyangga atau menutup berkas keluaran
  • Mencetak baris kaki untuk laporan yang diformat

Variabel yang ditetapkan selama aturan utama tetap berada dalam cakupan di dalam END — begitulah cara kerja total berjalan. Contoh di bawah ini menjumlahkan nilai gaji dari CSV dan mencetak totalnya di bagian kaki:

#!/usr/bin/env bash
csv=$(cat <<'EOF'
alice,engineering,95000
bob,marketing,72000
carol,engineering,105000
dave,hr,68000
EOF
)

echo "$csv" | awk -F',' '
  { total += $3; count++ }
  END { printf "Employees: %d  Total payroll: $%d\n", count, total }
'

Menggabungkan BEGIN, Aturan, dan END

Kekuatan sebenarnya terlihat saat Anda menggabungkan ketiga blok menjadi satu program awk mandiri yang mencetak tajuk, memproses setiap rekaman, dan mencetak ringkasan. Pola ini menjadi dasar alur pelaporan berbasis shell.

Di bawah ini adalah pembuat laporan lengkap yang membaca CSV berisi permintaan web dan mencetak detail per baris, serta jumlah akhir permintaan yang melebihi 1 detik:

#!/usr/bin/env bash
data=$(cat <<'EOF'
/api/ping,0.03
/api/users,1.45
/api/login,0.88
/api/upload,2.10
/api/health,0.02
/api/report,1.73
EOF
)

echo "$data" | awk -F',' '
BEGIN {
  printf "%-20s %10s %s\n", "Endpoint", "Latency(s)", "Status"
  print "--------------------------------------"
}
{
  status = ($2 > 1.0) ? "SLOW" : "OK"
  if (status == "SLOW") slow++
  printf "%-20s %10s %s\n", $1, $2, status
}
END {
  print "--------------------------------------"
  printf "Slow requests: %d / %d\n", slow, NR
}
'

Menggunakan BEGIN untuk Menetapkan OFS dan ORS

Dua variabel keluaran yang sering terabaikan dapat ditetapkan dengan rapi dalam BEGIN:

  • OFS (Pemisah Bidang Keluaran) — disisipkan di antara bidang saat Anda membangun ulang rekaman dengan $1=$1 atau menggunakan print $1, $2
  • ORS (Pemisah Rekaman Keluaran) — ditambahkan setelah setiap pemanggilan print (default-nya adalah \n)

Menetapkan OFS="," memungkinkan Anda memformat ulang TSV menjadi CSV dalam satu lintasan tanpa penggabungan string. Mengubah ORS menjadi "\n---\n" secara otomatis menambahkan pemisah di antara rekaman.

#!/usr/bin/env bash
# Convert whitespace-delimited data to CSV with a header
data=$(cat <<'EOF'
alice   engineering  95000
bob     marketing    72000
carol   engineering  105000
EOF
)

echo "$data" | awk 'BEGIN { OFS=","; print "name,dept,salary" }
{ $1=$1; print }'

Pola Rentang Praktis: Jendela Insiden dalam Catatan

Pola rentang sangat berguna dalam analisis catatan operasional. Salah satu tugas umum adalah mengekstrak semua baris catatan di antara awal dan akhir suatu insiden, yang ditandai oleh pesan penanda seperti INCIDENT START dan INCIDENT END.

Pada contoh di bawah, awk hanya mengekstrak baris di dalam jendela insiden dan menghitung kejadian ERROR di dalamnya — dengan menggabungkan pola rentang, akumulator, dan ringkasan END:

#!/usr/bin/env bash
log=$(cat <<'EOF'
08:00:01 INFO  Normal operation
08:01:00 INFO  INCIDENT START: disk pressure detected
08:01:05 ERROR write failed on /dev/sda1
08:01:09 ERROR inode table corruption
08:01:14 WARN  remounting read-only
08:01:22 INFO  INCIDENT END: disk replaced
08:02:00 INFO  Normal operation resumed
EOF
)

echo "$log" | awk '
/INCIDENT START/,/INCIDENT END/ {
  print
  if (/ERROR/) errors++
}
END { print "Errors during incident:", errors+0 }
'

Melewati Baris Pembatas dalam Rentang

Secara default, pola rentang menyertakan baris yang cocok dengan /start/ dan /end/. Untuk melewati baris pembatas tersebut dan hanya menyisakan isi di antaranya, lindungi tindakan dengan negasi atau variabel penanda:

  • Pendekatan negasi: /start/,/end/ { if (!/start/ && !/end/) print }
  • Pendekatan penanda: tetapkan variabel secara manual ke 1 pada /start/ dan ke 0 pada /end/

Pendekatan penanda lebih tangguh jika teks pembatas juga mungkin muncul dalam isi:

#!/usr/bin/env bash
doc=$(cat <<'EOF'
## preamble
some intro text
## BEGIN_REPORT
row1: alpha 100
row2: beta  200
row3: gamma 150
## END_REPORT
## appendix
EOF
)

echo "$doc" | awk '
/## BEGIN_REPORT/ { capture=1; next }
/## END_REPORT/   { capture=0 }
capture           { print }
'

Pemeriksaan Pemahaman: Perilaku Blok BEGIN

Uji pemahaman Anda tentang cara blok BEGIN dan END berinteraksi dengan pemrosesan masukan dalam awk.

Ringkasan Pelajaran: Pola, Rentang, dan BEGIN/END

Dalam pelajaran ini, Anda telah menguasai tiga fitur struktural paling andal dalam program awk:

  • Pola — ekspresi reguler (/ERROR/), relasional ($3 > 1000), negasi (!/DEBUG/), dan gabungan (&&, ||) — mengendalikan rekaman mana yang memicu tindakan tanpa memerlukan pernyataan if secara eksplisit.
  • Pola rentang (/start/,/end/) — memilih blok rekaman yang berurutan, sangat cocok untuk mengekstrak jendela insiden dari catatan, bagian konfigurasi, dan segmen laporan. Gunakan variabel penanda (next + boolean) jika Anda perlu mengecualikan baris pembatas itu sendiri.
  • Blok BEGIN — dijalankan satu kali sebelum masukan apa pun; ideal untuk menetapkan FS, OFS, ORS, menginisialisasi penghitung, dan mencetak tajuk laporan.
  • Blok END — dijalankan satu kali setelah semua masukan; merupakan tempat yang tepat untuk mencetak total, rata-rata, dan bagian kaki menggunakan variabel yang dikumpulkan dalam aturan utama.

Secara bersama-sama, fitur-fitur ini memungkinkan Anda menulis program awk yang lengkap dan terdokumentasi dengan baik, yang menerima teks mentah lalu menghasilkan laporan terstruktur dan mudah dibaca manusia — semuanya dalam satu tahap alur tanpa berkas sementara atau alat eksternal.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pola, Rentang, dan Blok BEGIN/END” gratis?

Ya — teks lengkap “Pola, Rentang, dan Blok BEGIN/END” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus DevOps Bootcamp, upgrade ke CoddyKit PRO. Kursus DevOps Bootcamp mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pola, Rentang, dan Blok BEGIN/END”?

Saring record dengan pola kondisional, lalu hasilkan header dan total menggunakan blok BEGIN dan END. Kamu berlatih DevOps Bootcamp dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai DevOps Bootcamp?

Tidak diperlukan pengalaman sebelumnya. DevOps Bootcamp di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Pola, Rentang, dan Blok BEGIN/END” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran DevOps Bootcamp ini?

Ya. Setiap pelajaran DevOps Bootcamp menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Record, Field, dan Pemisah Kustom dalam awk
  2. Pola, Rentang, dan Blok BEGIN/END
  3. Agregasi dengan Array dan Pengelompokan awk
  4. Fungsi awk, Pemformatan printf, dan Pembuatan Laporan
← Kembali ke DevOps Bootcamp