Perintah wc Linux: menghitung baris, kata, karakter, dan byte
wc menghitung newline, kata, byte, atau karakter dalam file maupun input standar. Tanpa opsi, hasilnya berurutan berupa jumlah newline, kata, dan byte; gunakan -l, -w, -c, atau -m untuk memilih hitungan yang diperlukan.
Ini sering digunakan tidak hanya untuk statistik sederhana tetapi juga untuk memeriksa jumlah entri log, mengagregasi hasil pencarian, memverifikasi file data, dan penilaian kondisional dalam skrip shell. Namun, Anda perlu menyadari bahwa wc -l menghitung jumlah karakter baris baru, bukan baris yang terlihat di layar, dan memahami perbedaan antara -c dan -m saat menggunakannya.
Apa itu perintah wc?
wc adalah singkatan dari word count, dan ia membaca seluruh input untuk menghitung baris baru, kata, byte, dan karakter. Jika tidak ada file yang ditentukan atau - digunakan menggantikan nama file, ia membaca dari input standar, sehingga praktis untuk dihubungkan dengan perintah lain melalui pipa.
Di GNU wc, sebuah kata adalah urutan karakter yang tidak kosong yang dipisahkan oleh spasi. Karena ini tidak menentukan kata gramatikal atau kata yang tercantum dalam kamus, string dengan tanda baca yang terpasang juga dapat dihitung sebagai satu kata.
Tata Bahasa Dasar dan Cara Membaca Output
Sintaks dasar adalah sebagai berikut. Tanda kurung menunjukkan item opsional dan tidak boleh dimasukkan dalam perintah yang sebenarnya.
wc [options] [file...]
Jika Anda menentukan satu file tanpa opsi apa pun, jumlah baris, jumlah kata, jumlah byte, dan nama file akan ditampilkan.
wc notes.txt
12 48 317 notes.txt
Hasil di atas berarti bahwa notes.txt mengandung 12 karakter baris baru, 48 kata, dan 317 byte. Jarak antar bidang output dapat bervariasi tergantung pada input, jadi Anda tidak boleh menafsirkan hasil berdasarkan jumlah spasi.
Untuk melihat hanya nilai yang Anda butuhkan, tentukan opsi yang sesuai.
wc -l notes.txt
wc -w notes.txt
wc -c notes.txt
Opsi utama dari wc
| Opsi | Sasaran perhitungan | Hal yang Perlu Diperhatikan |
|---|---|---|
-l, --lines |
Jumlah karakter baris baru | Jika baris terakhir tidak memiliki baris baru, baris tersebut tidak termasuk |
-w, --words |
Jumlah kata yang dipisahkan oleh spasi | Penentuan karakter whitespace dapat dipengaruhi oleh locale |
-c, --bytes |
Jumlah byte | Karakter multibyte dapat memiliki beberapa byte per karakter |
-m, --chars |
Jumlah karakter | Dipengaruhi oleh locale dan pengodean karakter saat ini |
-L, --max-line-length |
Lebar layar dari baris terpanjang | Bukan hanya penghitung karakter sederhana; tab dan karakter lebar juga diperhitungkan |
--files0-from=file |
Daftar file yang dipisahkan oleh karakter NUL | Opsi ekstensi GNU, berguna untuk menangani nama file dengan karakter khusus |
Anda juga dapat menentukan beberapa opsi sekaligus. Urutan keluaran ditentukan bukan oleh urutan opsi tetapi oleh jumlah baris, kata, karakter, byte, dan panjang baris maksimum. Untuk definisi yang tepat dan opsi ekstensi GNU, Anda dapat merujuk pada manual GNU Coreutils wc di Debian.
Cara menghitung jumlah baris dengan akurat
wc -l menghitung karakter newline
wc -l mengeluarkan jumlah karakter newline dalam input, bukan jumlah logis baris. Untuk file teks umum, setiap baris diakhiri dengan newline, sehingga hasilnya sesuai dengan jumlah baris, tetapi jika baris terakhir tidak memiliki newline, hasilnya mungkin satu lebih sedikit dari jumlah baris yang terlihat.
wc -l access.log
Anda dapat memeriksa apakah file teks diakhiri dengan baris baru dengan memeriksa byte terakhir seperti ini. Jika hasilnya adalah 0a, itu diakhiri dengan newline LF.
tail -c 1 notes.txt | od -An -t x1
Keluarkan hanya angka tanpa nama file
Jika Anda memberikan file sebagai argumen, nama file akan muncul setelah hasil. Jika Anda ingin menyimpan hanya angkanya di variabel shell, gunakan pengalihan input standar.
line_count=$(wc -l < notes.txt)
printf '%s\n' "$line_count"
GNU wc menampilkan nilai tanpa spasi depan saat mencetak satu nilai, tetapi jika skrip mempertimbangkan implementasi lain juga, lebih aman untuk memverifikasi format angka secara terpisah.
Perbedaan antara jumlah byte dan jumlah karakter
-c menghitung byte
wc -c menghitung jumlah byte dalam input. Ini cocok untuk memeriksa ukuran file dalam byte atau menghitung ukuran sebenarnya dari data yang akan ditransfer.
wc -c document.txt
Jika Anda hanya memerlukan ukuran yang dilaporkan oleh sistem file, stat mungkin lebih tepat karena dapat memperoleh nilai dari metadata tanpa membaca seluruh file.
stat -c '%s' document.txt
-m menghitung karakter menurut locale
wc -m menghitung karakter menurut locale dan pengodean saat ini. Dalam UTF-8, karakter ASCII menggunakan satu byte, sementara karakter lain dapat memakai beberapa byte. Dengan locale UTF-8, contoh berikut menghasilkan 12 byte dan 11 karakter, termasuk newline; hasil karakter dapat berbeda dengan locale lain.
printf 'Linux café\n' | wc -c
printf 'Linux café\n' | wc -m
Byte yang tidak valid dalam pengodean tidak dihitung sebagai karakter oleh GNU wc -m. Periksa locale dan pengodean file. Hitungan karakter juga tidak selalu sama dengan grafem yang dilihat manusia: huruf dan tanda kombinasi dapat dihitung terpisah.
Bagaimana cara menghitung jumlah kata?
wc -w menghitung jumlah string yang tidak kosong yang dipisahkan oleh spasi. Spasi atau tab berturut-turut berfungsi sebagai pemisah, dan ini tidak menghapus tanda baca atau menganalisis morfologi bahasa.
printf 'one two\tthree\n' | wc -w
3
wc -w mungkin tidak cocok untuk analisis bahasa atau penghitungan token yang tepat jika kata tidak dipisahkan jelas oleh whitespace. Gunakan penganalisis morfologi atau parser yang sesuai dengan tujuan.
Memeriksa jumlah dan total untuk beberapa file
Hasil berdasarkan file dan baris total
Ketika beberapa file ditentukan, sebuah baris total yang menunjukkan jumlah keseluruhan ditambahkan setelah hasil dari setiap file.
wc -l january.log february.log march.log
120 january.log
135 february.log
98 march.log
353 total
Menentukan metode tampilan total dengan opsi GNU --total
GNU Coreutils 9.2 dan versi lebih baru mendukung --total=auto, always, only, dan never. Untuk hanya mencetak total tanpa nama file atau label, gunakan:
wc -l --total=only january.log february.log march.log
--total adalah ekstensi GNU; versi lama atau Unix lain mungkin tidak mendukungnya. Periksa wc --help. Pada beberapa file, total -L adalah lebar maksimum, bukan jumlah semua lebar.
Contoh praktis menggunakan pipa
Menghitung baris hasil pencarian
Anda dapat menghitung jumlah baris yang cocok dengan meneruskan hasil grep ke wc -l.
grep 'ERROR' app.log | wc -l
Jika hanya jumlah baris yang cocok dalam satu file diperlukan, grep -c 'ERROR' app.log lebih langsung. Kedua metode menghitung setiap baris sekali meskipun pola muncul beberapa kali. Lihat panduan perintah grep Linux untuk cara pencarian lainnya.
Memeriksa jumlah baris dalam data CSV
Jika baris pertama dari file CSV berisi nama kolom, Anda dapat melewati header menggunakan tail -n +2 dan kemudian menghitung baris data.
tail -n +2 data.csv | wc -l
Jika bidang CSV mengandung newline, satu rekaman dapat menempati beberapa baris fisik; jika baris terakhir tidak berakhir dengan newline, hitungannya juga bisa kurang satu. Gunakan parser CSV untuk menghitung rekaman secara tepat. Lihat panduan perintah tail Linux untuk pemilihan baris.
Menghitung nama file dengan aman bahkan dengan karakter khusus
Output normal dari find dapat menghitung jumlah item dengan salah jika nama file mengandung karakter pemecah baris. Dalam lingkungan GNU, Anda dapat memisahkan nama file dengan karakter NUL dan kemudian menghitung jumlah NUL.
find ./logs -type f -name '*.log' -print0 | tr -cd '\0' | wc -c
Ini lebih aman untuk nama file yang mengandung spasi dan pemecah baris daripada sekadar menggunakan find... | wc -l. Pola pencarian *.log sebaiknya diberi tanda kutip agar shell tidak memperluasnya terlebih dahulu.
Memeriksa jumlah proses yang berjalan
Jika GNU/Linux ps mendukung --no-headers, Anda dapat menghitung baris daftar proses tidak termasuk header.
ps -e --no-headers | wc -l
Ini adalah tangkapan saat perintah dijalankan, dan hasilnya dapat bervariasi tergantung apakah proses pipelinenya sendiri disertakan atau implementasi ps. Saat menggunakannya sebagai metrik pemantauan, pertimbangkan menggunakan alat khusus atau metode pengumpulan berbasis /proc.
Memeriksa panjang baris terpanjang
wc -L menghitung lebar maksimum yang ditampilkan di layar, bukan jumlah byte sederhana atau jumlah karakter dari baris terpanjang. GNU wc memperhitungkan karakter lebar berdasarkan locale saat ini dan menghitung tab stop dalam satuan 8.
wc -L table.txt
Oleh karena itu, Anda tidak boleh mengasumsikan bahwa hasil -L sama dengan panjang karakter yang diperoleh dengan awk '{ print length }' atau jumlah byte dari wc -c. Untuk tugas yang memerlukan jumlah karakter yang tepat, seperti pemeriksaan gaya kode, Anda harus terlebih dahulu memverifikasi definisi panjang yang digunakan oleh alat tersebut.
Menangani banyak file dengan aman
Menghindari batas panjang baris perintah
Ketika ada sangat banyak file, ekspansi wildcard oleh shell mungkin melebihi batas panjang baris perintah. Opsi --files0-from=- dari GNU wc membaca daftar file yang dipisahkan NUL dari input standar untuk menghindari masalah ini.
find ./logs -type f -name '*.log' -print0 | wc -l --files0-from=-
Untuk beberapa file yang ditemukan, perintah ini mencetak hitungan masing-masing dan total. Pemisah NUL menjaga nama yang mengandung spasi atau newline. Periksa juga kesalahan find dan wc, serta tangani kondisi tidak ada file sesuai kebutuhan skrip.
Berhati-hatilah dengan total yang dibagi oleh xargs
find... | xargs wc -l dapat dibagi menjadi beberapa eksekusi wc ketika ada banyak file. Dalam kasus ini, setiap eksekusi menghasilkan total yang terpisah, sehingga sulit untuk membaca total keseluruhan secara langsung. Dalam lingkungan GNU, --files0-from=- lebih cocok untuk mengagregasi seluruh daftar sekaligus.
Prinsip penggunaan dalam skrip shell
Minta hanya nilai yang Anda butuhkan
Jangan pisahkan beberapa kolom keluaran wc tanpa opsi dengan spasi; sebaiknya, minta hanya nilai yang dibutuhkan dengan -l, -w, atau -c. Jika nama file juga tidak diperlukan, gunakan pengalihan input.
bytes=$(wc -c < archive.dat)
Bedakan antara kesalahan dan 0
Hasil 0 untuk file kosong dan kesalahan dari kegagalan membaca file memiliki makna yang berbeda. Jika Anda hanya menyimpan nilainya, Anda mungkin melewatkan standar kesalahan atau status keluar, jadi dalam otomatisasi penting, juga periksa apakah perintah berhasil.
if count=$(wc -l < input.txt); then
printf 'lines=%s\n' "$count"
else
printf 'Could not read input.txt.\n' >&2
fi
Cabang else menampilkan pesan kesalahan; contoh ini sendiri dapat berakhir dengan status nol setelah pesan berhasil dicetak. Tambahkan penanganan keluar yang sesuai bila skrip harus gagal. Pada pipeline, periksa juga kegagalan perintah sebelumnya, bukan hanya hasil wc.
Kesalahpahaman dan Pencegahan Umum
Hasil dari wc -l kurang satu dari yang diharapkan
Kemungkinan baris terakhir tidak diakhiri dengan karakter baris baru. wc -l menghitung karakter baris baru, jadi tidak termasuk baris terakhir yang tidak lengkap. Sebelum mengubah format asli secara sembarangan, periksa aturan keluaran dari program yang menghasilkan file tersebut.
-c dan -m berbeda untuk karakter multibyte.
-c menghitung byte, sedangkan -m menghitung karakter menurut locale. Perbedaan pada UTF-8 adalah normal. Gunakan -c untuk ukuran byte; untuk karakter yang dilihat manusia, perhatikan bahwa grafem dapat terdiri atas beberapa karakter.
Bisakah saya menghitung jumlah file dengan keluaran ls?
Untuk nama file normal, ls | wc -l mungkin terlihat sederhana, tetapi tidak cocok untuk otomatisasi karena alias, format keluaran, dan nama file yang mengandung baris baru. Gunakan find untuk menentukan tipe file dan kedalaman pencarian, dan jika menangani nama file sembarang, pilih metode yang dipisahkan NUL.
Pertanyaan Yang Sering Diajukan
Apa yang terjadi jika Anda menjalankan wc tanpa opsi?
Secara default, jumlah baris, kata, dan byte akan ditampilkan dalam urutan tersebut. Jika Anda menentukan file sebagai argumen, nama file juga akan ditampilkan di akhir.
Berapa hasil wc untuk file kosong?
File kosong menghasilkan 0 untuk newline, kata, dan byte. File yang hanya berisi satu byte LF menghasilkan 1 newline dan 1 byte; urutan CRLF terdiri atas dua byte dan satu LF.
Apakah wc -w menghitung kata dengan akurat dalam setiap bahasa?
wc -w menghitung string yang dipisahkan oleh spasi; ini tidak melakukan segmentasi kata yang mempertimbangkan bahasa. Anggap hasilnya sebagai jumlah yang dipisahkan oleh spasi, bukan sebagai jumlah kata secara linguistik.
Bisakah saya menghitung jumlah baris di direktori itu sendiri?
wc bukanlah perintah untuk menghitung entri direktori secara langsung. Anda perlu membuat daftar file yang diinginkan menggunakan perintah seperti find dan kemudian menggabungkan hasilnya. Jika mungkin ada karakter khusus dalam nama file, gunakan karakter NUL sebagai pemisah, bukan baris baru.
Ringkasan
Jumlah baris dapat diperiksa dengan wc -l, jumlah kata dengan wc -w, jumlah byte dengan wc -c, dan jumlah karakter dengan wc -m. Keluaran tanpa opsi menunjukkan baris, kata, dan byte secara berurutan, dan jika beberapa file ditentukan, nilai untuk setiap file dan jumlah total ditampilkan.
Untuk hasil yang akurat, ingat bahwa wc -l menghitung karakter baris baru, byte dan karakter bisa berbeda, dan pemisah NUL mungkin diperlukan untuk daftar nama file. Untuk melihat alat dasar lainnya bersama-sama, Anda dapat merujuk ke daftar perintah yang sering digunakan di Linux.




