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 Linux Command Line & Bash Scripting Mastery 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 Linux Command Line & Bash Scripting Mastery, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Linux Command Line & Bash Scripting Mastery 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 }' fileJika 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 —
BEGINdanEND
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 }' filePerilaku 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
awkmandiri yang tidak memerlukan masukan
Sintaks:
awk 'BEGIN { setup } pattern { action }' fileMenetapkan 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=$1atau menggunakanprint $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 pernyataanifsecara 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 Linux Command Line & Bash Scripting Mastery, upgrade ke CoddyKit PRO. Kursus Linux Command Line & Bash Scripting Mastery 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 Linux Command Line & Bash Scripting Mastery 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 Linux Command Line & Bash Scripting Mastery?
Tidak diperlukan pengalaman sebelumnya. Linux Command Line & Bash Scripting Mastery 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 Linux Command Line & Bash Scripting Mastery ini?
Ya. Setiap pelajaran Linux Command Line & Bash Scripting Mastery 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
- Record, Field, dan Pemisah Kustom dalam awk
- Pola, Rentang, dan Blok BEGIN/END
- Agregasi dengan Array dan Pengelompokan awk
- Fungsi awk, Pemformatan printf, dan Pembuatan Laporan