Bash Scripting #6: Mengolah Teks dengan sed dan awk

Table of Contents

Pendahuluan

Setelah belajar Fungsi Rekursif dan Pengolahan File dalam Bash, kini saatnya mendalami pengolahan teks menggunakan sed dan awk.

🔹 sed (Stream Editor) digunakan untuk mencari, mengganti, dan mengedit teks dalam file.
🔹 awk adalah alat yang lebih kompleks untuk memproses teks berbasis pola dan kolom.

Keduanya sangat berguna dalam manipulasi teks otomatis seperti mengganti kata dalam file konfigurasi, mengekstrak data dari log, atau menganalisis output perintah Bash. 🚀


1️⃣ Menggunakan sed untuk Manipulasi Teks

Mengganti Kata dalam File

Format dasar:

sed 's/kata_lama/kata_baru/g' file.txt
  • s = Substitusi (replace).
  • g = Global, mengganti semua kemunculan dalam satu baris.

Contoh: Mengganti Kata dalam File

Misalnya, kita punya data.txt:

Halo dunia, belajar Bash scripting itu seru!
Halo dunia, ini contoh `sed`.

Gunakan perintah ini untuk mengganti "Halo dunia" menjadi "Hi semua":

sed 's/Halo dunia/Hi semua/g' data.txt

💡 Output:

Hi semua, belajar Bash scripting itu seru!
Hi semua, ini contoh `sed`.

📌 Penjelasan:

  • s/Halo dunia/Hi semua/g → Mengganti "Halo dunia" dengan "Hi semua" di seluruh file.

Menghapus Baris yang Mengandung Kata Tertentu

Gunakan perintah berikut untuk menghapus semua baris yang mengandung kata "hapus":

sed '/hapus/d' file.txt

💡 d (delete) akan menghapus baris yang mengandung pola tersebut.


Menghapus Spasi Berlebih di dalam Teks

sed 's/  */ /g' file.txt

📌 Penjelasan:

  • s/ */ /g mengganti dua atau lebih spasi dengan satu spasi.

2️⃣ Menggunakan awk untuk Pemrosesan Data

awk lebih fleksibel dalam menangani data berbasis kolom, seperti CSV atau log sistem.

Menampilkan Kolom Tertentu dari File

Misalnya, kita punya file user_data.txt:

1 Budi 25
2 Siti 30
3 Andi 28

Perintah berikut akan menampilkan hanya kolom nama (kolom ke-2):

awk '{print $2}' user_data.txt

💡 Output:

Budi
Siti
Andi

📌 Penjelasan:

  • $1 = Kolom pertama, $2 = Kolom kedua, $3 = Kolom ketiga, dst.
  • print $2 mencetak hanya kolom ke-2 (nama pengguna).

Mencari Data Berdasarkan Kondisi

Menampilkan hanya pengguna berusia di atas 27 tahun:

awk '$3 > 27 {print $2, "berusia", $3}' user_data.txt

💡 Output:

Siti berusia 30
Andi berusia 28

📌 Penjelasan:

  • $3 > 27 → Memfilter hanya baris dengan usia lebih dari 27.
  • {print $2, "berusia", $3} → Mencetak nama + usia dalam format lebih jelas.

Menghitung Total Data dalam File

Menampilkan jumlah total baris dalam file:

awk 'END {print "Total data:", NR}' user_data.txt

💡 Output:

Total data: 3

📌 Penjelasan:

  • NR adalah jumlah baris dalam file.
  • END {print "Total data:", NR} mencetak total jumlah baris setelah file selesai diproses.

3️⃣ Studi Kasus: Mengedit Log Sistem dengan sed dan awk

Misalnya kita punya log di access.log:

192.168.1.1 - - [10/Feb/2025] "GET /index.html"
192.168.1.2 - - [10/Feb/2025] "POST /login"
192.168.1.3 - - [10/Feb/2025] "GET /dashboard"

Tugas kita:
✅ Mengambil IP address saja.
✅ Mengganti GET menjadi AKSES, dan POST menjadi KIRIM.

1. Menampilkan Hanya IP Address dengan awk

awk '{print $1}' access.log

💡 Output:

192.168.1.1
192.168.1.2
192.168.1.3

📌 Penjelasan:

  • $1 adalah kolom pertama, yang berisi IP Address.

2. Mengganti GET dan POST dengan sed

sed -e 's/GET/AKSES/g' -e 's/POST/KIRIM/g' access.log

💡 Output:

192.168.1.1 - - [10/Feb/2025] "AKSES /index.html"
192.168.1.2 - - [10/Feb/2025] "KIRIM /login"
192.168.1.3 - - [10/Feb/2025] "AKSES /dashboard"

📌 Penjelasan:

  • -e 's/GET/AKSES/g' → Mengubah "GET" menjadi "AKSES".
  • -e 's/POST/KIRIM/g' → Mengubah "POST" menjadi "KIRIM".

Kesimpulan & Tantangan untuk Kamu!

Sekarang kamu sudah belajar:
Mengedit teks dengan sed (mengganti kata, menghapus baris, membersihkan spasi).
Memfilter dan menampilkan data dengan awk (memilih kolom, mencari berdasarkan kondisi, menghitung total).
Studi kasus pengolahan log sistem dengan sed dan awk.

🔥 Tantangan:

  1. Buat skrip Bash yang membaca file data.csv dan menampilkan hanya kolom kedua menggunakan awk.
  2. Ganti semua kemunculan kata "ERROR" dalam log.txt menjadi "PERINGATAN" menggunakan sed.

Bagikan kodenya di komentar! 😉

Di artikel berikutnya, kita akan membahas penggunaan grep dan cut untuk pencarian teks lanjutan dalam Bash scripting. Stay tuned! 🚀

Leave a Reply

Your email address will not be published. Required fields are marked *