Pengolahan teks pada akhirnya bermuara pada angka: berapa baris log hari ini, berapa kata dalam sebuah dokumen, berapa file dalam folder proyek. Perintah wc (word count) adalah alat hitung standar Linux — satu perintah untuk baris, kata, dan byte sekaligus. Di sekelilingnya berdiri pola hitung lain yang sama seringnya dipakai: ls | wc -l untuk menghitung file, grep -c untuk menghitung kecocokan, dan sort | uniq -c untuk frekuensi kemunculan. Pada chapter ini kita bedah ketiganya, lengkap dengan satu jebakan klasik yang membuat hitungan terasa kurang satu.

Tiga Angka dalam Satu Baris Output #

Tanpa opsi, wc mencetak tiga angka sekaligus — jumlah baris, jumlah kata, jumlah byte — diikuti nama file. Tiap angka juga bisa diminta terpisah lewat opsi -l (lines), -w (words), dan -c (bytes):

bash
printf 'budi jakarta\nsiti bandung\nandi surabaya\n' > data.txt
wc data.txt
wc -l data.txt
wc -w data.txt
wc -c data.txt

Output yang Dihasilkan:

text
 3  6 40 data.txt
3 data.txt
6 data.txt
40 data.txt

Mari kita bedah baris per barisnya:

  1. Baris 1 (printf ... > data.txt): membuat fixture tiga baris — tiap baris memuat dua kata.
  2. Baris 2 (wc data.txt): kolom pertama jumlah baris (3), kolom kedua jumlah kata (6), kolom ketiga jumlah byte termasuk tanda baris baru.
  3. Baris 3-5: masing-masing opsi meminta satu angka saja, tetapi nama file tetap tercetak di belakangnya.

Opsi -m menghitung karakter, bukan byte. Pada teks ASCII murni keduanya sama; bedanya baru terlihat pada karakter seperti é atau emoji yang memakan lebih dari satu byte.

Hanya Angkanya dengan wc -l < file #

Sering kita butuh angkanya saja — misalnya untuk disimpan ke variabel atau dibandingkan dalam skrip. Kuncinya ada pada mekanisme wc: kolom nama file tercetak hanya bila wc menerima file sebagai argumen. Begitu masukan datang dari stdin — lewat redirect < atau pipe — nama file menghilang:

bash
printf 'budi jakarta\nsiti bandung\nandi surabaya\n' > data.txt
wc -l data.txt
wc -l < data.txt
cat data.txt | wc -l

Output yang Dihasilkan:

text
3 data.txt
3
3

Mari kita bedah baris per barisnya:

  1. Baris 2 (wc -l data.txt): file diberikan sebagai argumen, jadi wc tahu dan mencetak namanya — 3 data.txt.
  2. Baris 3 (wc -l < data.txt): redirect membuka file lalu menyerahkannya sebagai stdin; wc tidak tahu asalnya, kolom nama hilang — tersisa 3.
  3. Baris 4 (cat data.txt | wc -l): hasilnya sama 3, tetapi membayar satu proses cat ekstra — bentuk < lebih hemat.

Menghitung File dan Kecocokan #

Kekuatan wc -l baru terasa saat berada di ujung pipeline. ls mendaftar isi folder, find mendaftar file secara rekursif, dan grep -c menjadi jalan pintas untuk menghitung baris yang cocok:

bash
printf 'budi:jakarta:25\nsiti:bandung:31\nandi:jakarta:28\n' > data.txt
mkdir -p foto/2025 foto/2026
touch foto/2025/liburan.jpg foto/2026/rapat.jpg foto/2026/keluarga.jpg
ls foto/2026 | wc -l
find foto -type f | wc -l
grep -c jakarta data.txt
grep jakarta data.txt | wc -l

Output yang Dihasilkan:

text
2
3
2
2

Perintah ls foto/2026 | wc -l menghitung isi satu tingkat folder (2), sedangkan find foto -type f | wc -l menghitung seluruh file sampai ke subfolder (3) — find kita bahas tuntas di chapter berikutnya. Dua perintah terakhir menghasilkan angka sama: grep -c adalah jalan pintas grep ... | wc -l. Kedua pola ini aman selama nama file tidak memuat baris baru — kejadian yang sangat langka, tetapi patut diketahui.

Jebakan: Baris Terakhir Tanpa Baris Baru #

wc -l sebenarnya menghitung karakter baris baru (\n), bukan baris yang tampak di editor. Bila sebuah file tidak diakhiri \n — sering terjadi pada file hasil printf tanpa \n di ujung — baris terakhirnya tidak ikut terhitung:

bash
printf 'budi\nsiti\nandi\n' > lengkap.txt
printf 'budi\nsiti\nandi' > tanpa-akhir.txt
wc -l lengkap.txt tanpa-akhir.txt

Output yang Dihasilkan:

text
 3 lengkap.txt
 2 tanpa-akhir.txt
 5 total

Kedua file sama-sama memuat tiga nama, tetapi wc melaporkan 2 untuk tanpa-akhir.txt. Baris terakhir tanpa \n penutup tidak menambah hitungan karena tidak ada karakter yang dihitung. Perhatikan juga baris total yang otomatis muncul saat wc menerima lebih dari satu file — penjumlahan semua file pada baris terakhir.

Frekuensi Kemunculan dengan sort | uniq -c #

Pertanyaan hitung yang paling sering diajukan bukan “berapa jumlah” melainkan “mana yang paling sering muncul”. Jawabannya pola dari chapter sort, uniq, dan cut ; untuk menghitung kata, tinggal menambahkan tr dari chapter sebelumnya:

bash
printf 'error\ninfo\nerror\nwarning\nerror\ninfo\n' > level.log
sort level.log | uniq -c | sort -rn
printf 'budi suka teh\nsiti suka kopi\nbudi suka kopi\n' > selera.txt
tr ' ' '\n' < selera.txt | sort | uniq -c | sort -rn

Output yang Dihasilkan:

text
      3 error
      2 info
      1 warning
      3 suka
      2 kopi
      2 budi
      1 teh
      1 siti

Mari kita bedah baris per barisnya:

  1. Baris 2 (sort level.log | uniq -c | sort -rn): pola klasik frekuensi — uniq -c butuh input terurut, dan sort -rn mengurutkan hitungan dari yang terbesar. Log level kita didominasi error (3), diikuti info (2), lalu warning (1).
  2. Baris 4 (tr ' ' '\n' < selera.txt): memecah tiap kalimat menjadi satu kata per baris agar bisa dihitung uniq -c — kata suka muncul di ketiga kalimat sehingga menempati puncak dengan 3.

wc menutup rangkaian alat penghitung teks kita. Perhatian berikutnya berpindah dari isi file ke file itu sendiri: menemukan file berdasarkan nama, ukuran, dan waktu perubahan, lalu mengirim daftar temuan itu ke perintah lain — pekerjaan find dan xargs, materi chapter berikutnya. Daftar opsi lengkapnya ada di halaman manual wc(1) .