Text Processing: awk & sed — Terminal

Text Processing: awk & sed Dua tool klasik Unix ini adalah senjata ampuh untuk memproses teks di terminal — tanpa perlu membuka editor. sed — Stream Editor sed

Text Processing: awk & sed

Dua tool klasik Unix ini adalah senjata ampuh untuk memproses teks di terminal — tanpa perlu membuka editor.

sed — Stream Editor

sed mengubah teks baris per baris menggunakan ekspresi reguler:

# Sintaks dasar
sed 's/CARI/GANTI/' file.txt       # ganti pertama per baris
sed 's/CARI/GANTI/g' file.txt      # ganti semua (global)
sed 's/CARI/GANTI/gi' file.txt     # case-insensitive

# Contoh nyata
sed 's/localhost/production.com/g' config.txt
sed 's/v1/v2/g' api-docs.md

# Hapus baris yang mengandung pattern
sed '/ERROR/d' log.txt

# Tampilkan baris tertentu
sed -n '5,10p' file.txt      # baris 5 sampai 10
sed -n '/START/,/END/p' file.txt

# Edit file langsung (in-place)
sed -i 's/old/new/g' file.txt        # Linux
sed -i '' 's/old/new/g' file.txt    # macOS

# Tambah baris sebelum/sesudah pattern
sed '/pattern/i Baris sebelumnya' file.txt
sed '/pattern/a Baris sesudahnya' file.txt

awk — Text Processing Language

awk adalah bahasa pemrograman mini khusus untuk memproses teks berstruktur (kolom):

# awk memproses per baris, kolom dipisah whitespace
# $1=kolom1, $2=kolom2, dst. $0=seluruh baris

# Tampilkan kolom tertentu
awk '{print $1}' data.txt          # kolom pertama saja
awk '{print $1, $3}' data.txt      # kolom 1 dan 3

# Contoh: dari output ls -l, tampilkan nama file dan ukuran
ls -l | awk '{print $5, $9}'

# Filter baris berdasarkan kondisi
awk '$3 > 100' data.txt            # baris di mana kolom 3 > 100
awk '/ERROR/ {print $0}' log.txt   # baris yang mengandung ERROR

# Separator kustom
awk -F":" '{print $1}' /etc/passwd  # separator ":"
awk -F"," '{print $2}' data.csv     # separator "," (CSV)

# Kalkulasi
awk '{sum += $1} END {print "Total:", sum}' numbers.txt

# NR = nomor baris, NF = jumlah kolom
awk 'NR==1{print "Header:", $0}' file.txt
awk '{print NR": "$0}' file.txt    # tambah nomor baris

Kombinasi sed & awk

# Pipeline klasik
cat access.log | grep "404" | awk '{print $7}' | sort | uniq -c | sort -rn

# Ekstrak IP dari log, hitung frekuensi
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10

# Ubah format CSV menjadi TSV
sed 's/,/\t/g' data.csv

# Hapus baris kosong
sed '/^$/d' file.txt
awk 'NF' file.txt       # cara awk

Contoh Kasus Nyata

# Ganti semua URL di file konfigurasi
sed -i 's|http://dev.local|https://prod.com|g' .env

# Ekstrak semua email dari file
grep -oE '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' contacts.txt

# Proses CSV: tampilkan nama (kolom 1) dengan nilai > 90 (kolom 3)
awk -F"," '$3 > 90 {print $1}' scores.csv

# Hitung total dari kolom angka
awk -F"," '{sum+=$2} END {print "Total:", sum}' sales.csv

Tips

  1. Selalu test dulu tanpa -i sebelum edit file langsung dengan sed
  2. awk untuk kolom, sed untuk substitusi teks
  3. grep untuk filter, awk untuk transformasi
  4. Gunakan man sed dan man awk untuk referensi lengkap