Cara Menggunakan Perintah wc di Linux

Diterbitkan: 2022-07-23
Laptop Linux menampilkan prompt bash
fatmawati achmad zaenuri/Shutterstock.com

Menghitung jumlah baris, kata, dan byte dalam file berguna, tetapi fleksibilitas sebenarnya dari perintah wc Linux berasal dari bekerja dengan perintah lain. Mari lihat.

Apa Perintah wc?

Perintah wc adalah aplikasi kecil. Ini adalah salah satu utilitas inti Linux, jadi tidak perlu menginstalnya. Itu sudah ada di komputer Linux Anda.

Anda dapat menggambarkan apa yang dilakukannya dalam beberapa kata. Ini menghitung baris, kata, dan byte dalam file atau pilihan file dan mencetak hasilnya di jendela terminal. Itu juga dapat mengambil inputnya dari aliran STDIN, artinya teks yang Anda inginkan untuk diproses dapat disalurkan ke dalamnya. Di sinilah wc benar-benar mulai menambah nilai.

Cara Menggunakan Pipa di Linux
TERKAIT Cara Menggunakan Pipes di Linux

Ini adalah contoh bagus dari mantra Linux "lakukan satu hal dan lakukan dengan baik." Karena menerima input pipa, dapat digunakan dalam mantra multi-perintah. Seperti yang akan kita lihat, utilitas kecil yang berdiri sendiri ini sebenarnya adalah pemain tim yang hebat.

Salah satu cara saya menggunakan wc adalah sebagai pengganti dalam perintah yang rumit atau alias saya sedang memasak. Jika perintah yang sudah selesai berpotensi merusak dan menghapus file, saya sering menggunakan wc sebagai pengganti untuk perintah yang sebenarnya dan berbahaya.

Dengan begitu, selama pengembangan perintah saya mendapatkan umpan balik visual bahwa setiap file sedang diproses seperti yang saya harapkan. Tidak ada kemungkinan hal buruk terjadi saat saya bergulat dengan sintaks.

Sesederhana wc , masih ada beberapa kebiasaan kecil yang perlu Anda ketahui.

Memulai dengan wc

Cara paling sederhana untuk menggunakan wc adalah dengan memberikan nama file teks pada baris perintah.

 wc lorem.txt 

Menggunakan wc dengan file dengan satu baris teks yang panjang

Ini menyebabkan wc memindai file dan menghitung baris, kata, dan byte, dan menuliskannya ke jendela terminal.

Kata-kata dianggap sebagai sesuatu yang dibatasi oleh spasi. Apakah itu kata-kata dari bahasa asli atau bukan, itu tidak relevan. Jika file tidak berisi apa-apa selain "frd g lkj", itu masih dihitung sebagai tiga kata.

Baris adalah urutan karakter yang diakhiri oleh carriage return atau akhir file. Tidak masalah jika baris membungkus editor Anda atau di jendela terminal, sampai wc menemukan carriage return atau akhir file, itu masih baris yang sama.

Contoh pertama kami menemukan satu baris di seluruh file. Berikut isi dari file “lorem.txt”.

 kucing lorem.txt 

Isi file dengan satu baris panjang

Semua itu dihitung sebagai satu baris karena tidak ada carriage return. Bandingkan ini dengan file lain, "lorem2.txt", dan bagaimana wc menafsirkannya.

 wc lorem2.txt
 kucing lorem2.txt 

Menggunakan wc dengan file dengan banyak baris

Kali ini, wc menghitung 15 baris karena carriage return telah dimasukkan ke dalam teks untuk memulai baris baru pada titik tertentu. Namun, jika Anda menghitung baris dengan teks di dalamnya, Anda akan melihat hanya ada 12 baris.

Tiga baris lainnya adalah baris kosong di akhir file. Ini hanya berisi pengembalian pengangkutan. Meskipun tidak ada teks di baris ini, baris baru telah dimulai dan wc menghitungnya seperti itu.

Kita dapat mengirimkan file sebanyak yang kita inginkan ke wc .

 wc lorem.txt lorem2.txt 

Menggunakan wc dengan dua file

Kami mendapatkan statistik untuk setiap file individual dan total untuk semua file.

Kami juga dapat menggunakan wildcard sehingga kami dapat memilih file yang cocok daripada file yang dinamai secara eksplisit.

 wc *.txt *.? 

Menggunakan wc dengan wildcard

Opsi Baris Perintah

Secara default, wc akan menampilkan baris, kata, dan byte di setiap file. Ini sama dengan menggunakan opsi -l (baris) -w (words) dan -c (bytes).

 wc lorem.txt
 wc -l -w -c lorem.txt 

Menggunakan wc dengan opsi baris, kata, dan byte

Kita dapat menentukan kombinasi angka mana yang ingin kita lihat.

 wc -l lorem.txt

wc -w lorem.txt

wc -c lorem.txt

wc -l -c lorem.txt 

Menggunakan wc dengan kombinasi opsi

Perhatian khusus harus diberikan pada angka terakhir, yang dihasilkan oleh opsi -c (byte). Banyak orang salah mengira ini sebagai menghitung karakter. Ini benar-benar menghitung byte . Jumlah karakter dan jumlah byte mungkin sama. Tapi tidak selalu.

Mari kita lihat isi file bernama “unicode.txt.”

 cat unicode.txt 

Konten file yang berisi karakter non-Latin

Ini memiliki tiga kata dan karakter alfabet non-Latin. Kami akan membiarkan wc memproses file dengan pengaturan default byte , dan kami akan melakukannya lagi tetapi meminta karakter dengan opsi -m (karakter).

 wc unicode.txt
 wc -l -w -m unicode.txt 

Menghitung byte dalam file dan kemudian menghitung karakter dalam file yang sama

Ada lebih banyak byte daripada karakter.

Mari kita lihat hex dump file dan lihat apa yang terjadi. Opsi -C (kanonik) perintah hexdump menampilkan byte dalam file dalam baris 16, dengan ekuivalen ASCII biasa (jika ada) ditampilkan di akhir baris. Jika tidak ada karakter ASCII yang sesuai, titik “ . ” ditampilkan sebagai gantinya.

 hexdump -C unicode.txt 

Hexdump dari file pendek dengan karakter non-Latin

Dalam ASCII, nilai heksadesimal 0x20 mewakili karakter spasi. Jika kita menghitung tiga nilai dari kiri, kita melihat nilai berikutnya adalah karakter spasi. Jadi tiga nilai pertama 0x62 , 0x6f , dan 0x79 mewakili huruf dalam "anak laki-laki."

Melompati 0x20 , kita melihat kumpulan tiga nilai heksadesimal lainnya: 0x63 , 0x61 , dan 0x74 . Ini mengeja "kucing." Melompati karakter spasi berikutnya, kita melihat tiga nilai lagi untuk huruf dalam "anjing." Ini adalah 0x64 , 0x5f , dan 0x67 .

Tepat di belakang kata “anjing” kita dapat melihat karakter spasi 0x20 , dan lima nilai heksadesimal lainnya. Dua yang terakhir adalah carriage return, 0x0a .

Tiga byte lainnya mewakili karakter non-Latin, yang kami beri warna hijau. Ini adalah karakter Unicode, dan dibutuhkan tiga byte untuk mengkodekannya. Ini adalah 0xe1 , 0xaf , dan 0x8a .

Jadi, pastikan Anda tahu apa yang Anda hitung, dan byte dan karakter tidak harus sama. Biasanya, menghitung byte lebih berguna karena memberi tahu Anda apa yang sebenarnya ada di dalam file. Menghitung dengan karakter memberi Anda jumlah hal yang diwakili oleh konten file.

TERKAIT: Apa Pengkodean Karakter Seperti ANSI dan Unicode, dan Bagaimana Perbedaannya?

Mengambil Nama File Dari File

Ada cara lain untuk memberikan nama file ke wc . Anda dapat memasukkan nama file ke dalam file, dan meneruskan nama file itu ke wc . Ini membuka file, mengekstrak nama file, dan memprosesnya seolah-olah telah diteruskan pada baris perintah. Ini memungkinkan Anda untuk menyimpan kumpulan nama file yang berubah-ubah untuk digunakan kembali.

Tapi ada gotcha, dan itu yang besar. Nama file harus diakhiri null , bukan carriage return dihentikan. Artinya, setelah setiap nama file harus ada byte nol 0x00 alih-alih byte carriage return 0x0a .

Anda tidak dapat membuka editor dan membuat file dengan format ini. Biasanya, file seperti ini dihasilkan oleh program lain. Tetapi, jika Anda memiliki file seperti itu, inilah cara Anda menggunakannya.

Inilah file kami yang berisi nama file. Membukanya dalam waktu yang less menunjukkan kepada Anda karakter aneh “ ^@ ” yang less digunakan untuk menunjukkan byte nol.

 lebih sedikit source-files-list.txt 

File dalam ukuran kurang yang berisi byte nol

Untuk menggunakan file dengan wc , kita perlu menggunakan --files0-from (baca input dari) dan meneruskan nama file yang berisi nama file.

 wc ---files0-from=source-files-list.txt 

wc memproses file dengan nama file yang diakhiri null

File diproses persis seolah-olah disediakan di baris perintah.

Pemipaan Input ke wc

Cara yang jauh lebih umum, fleksibel, dan produktif untuk mengirim input ke wc adalah dengan menyalurkan output dari perintah lain ke wc . Kita dapat mendemonstrasikan ini dengan perintah echo .

 echo "Hitung ini untukku" | toilet
 echo -e "Hitung ini\nuntuk saya" | toilet 

Menggunakan echo untuk mengirim input ke wc

Perintah echo kedua menggunakan opsi -e (karakter yang diloloskan) untuk mengizinkan urutan yang lolos seperti kode pemformatan baris baru “ \n ”. Ini menyuntikkan baris baru, menyebabkan wc melihat input sebagai dua baris.

Berikut adalah rangkaian perintah yang memberi masukan dari satu ke yang lain.

 temukan ./* -tipe f | rev | potong -d'.' -f1 | rev | urutkan | unik
  • find mencari file ( type -f ) secara rekursif, dimulai dari direktori saat ini. rev membalikkan nama file.
  • cut mengekstrak bidang pertama ( -f1 ) dengan mendefinisikan pembatas bidang menjadi titik “ . ” dan membaca dari “depan” nama file yang dibalik hingga periode pertama yang ditemukan. Kami sekarang telah mengekstrak ekstensi file.
  • rev membalikkan bidang pertama yang diekstraksi.
  • sort mengurutkannya dalam urutan abjad.
  • uniq mencantumkan entri unik ke jendela terminal.

Daftar ekstensi unik di pohon direktori saat ini

Perintah ini mencantumkan semua ekstensi file unik di direktori saat ini dan subdirektori apa pun.

Jika kita menambahkan opsi -c (count) ke perintah uniq , itu akan menghitung kemunculan setiap jenis ekstensi. Tetapi jika kita ingin mengetahui berapa banyak ekstensi file yang unik dan berbeda, kita dapat wc sebagai perintah terakhir di baris, dan menggunakan opsi -l (baris).

 temukan ./* -tipe f | rev | potong -d'.' -f1 | rev | urutkan | unik | wc -l 

Menambahkan wc untuk menghitung ekstensi unik

TERKAIT: Cara Menggunakan Perintah potong Linux

Dan akhirnya

Inilah satu trik terakhir yang bisa dilakukan wc untuk Anda. Ini akan memberi tahu Anda panjang baris terpanjang dalam file. Sayangnya, itu tidak memberi tahu Anda baris mana itu. Itu hanya memberi Anda panjangnya.

 wc -L taf.c 

Mendapatkan panjang baris terpanjang dalam file dengan wc

Namun berhati-hatilah, tab itu dihitung sebagai delapan spasi. Dilihat di editor saya, ada tiga tab dua spasi di awal baris itu. Panjang sebenarnya adalah 124 karakter. Jadi angka yang dilaporkan diperluas secara artifisial.

Saya akan memperlakukan fungsi ini dengan sedikit garam. Dan maksud saya, jangan menggunakannya. Outputnya menyesatkan.

Terlepas dari keanehannya, wc adalah alat yang hebat untuk memasukkan perintah pipa ketika Anda perlu menghitung semua jenis nilai, bukan hanya kata-kata dalam file.

TERKAIT: 37 Perintah Linux Penting Yang Harus Anda Ketahui