
Menghitung jumlah baris, kata, dan byte dalam file berguna, tetapi fleksibilitas Linux yang sebenarnya wc
perintah berasal dari bekerja dengan perintah lain. Mari lihat.
Apa Perintah wc?
Itu wc
perintah 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.
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 yang saya gunakan 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 nyata 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
adalah, masih ada beberapa kebiasaan kecil yang perlu Anda ketahui.
Memulai dengan wc
Cara paling sederhana untuk digunakan wc
adalah untuk meneruskan nama file teks pada baris perintah.
wc lorem.txt
Hal ini menyebabkan wc
untuk 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 itu terbungkus di 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”.
cat lorem.txt
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
cat lorem2.txt
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 jadi wc
menghitung mereka seperti itu.
Kami dapat mengirimkan banyak file ke wc
seperti yang kita suka.
wc lorem.txt lorem2.txt
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 *.?
Opsi Baris Perintah
Secara default, wc
akan menampilkan baris, kata, dan byte di setiap file. Ini sama dengan menggunakan -l
(garis) -w
(kata-kata) dan -c
(byte) pilihan.
wc lorem.txt
wc -l -w -c lorem.txt
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
Perhatian khusus harus diberikan pada gambar terakhir, yang dihasilkan oleh -c
(byte) pilihan. Banyak orang salah mengira ini sebagai menghitung karakter. Itu benar-benar penting byte. Jumlah karakter dan jumlah byte mungkin sama. Tapi tidak selalu.
Mari kita lihat isi file bernama “unicode.txt.”
cat unicode.txt
Ini memiliki tiga kata dan karakter alfabet non-Latin. Kami akan membiarkan wc
memproses file dengan pengaturan default bytedan kami akan melakukannya lagi tetapi meminta karakter dengan -m
(karakter) pilihan.
wc unicode.txt
wc -l -w -m unicode.txt
Ada lebih banyak byte daripada karakter.
Mari kita lihat hex dump file dan lihat apa yang terjadi. Itu hexdump
perintah -C
(kanonik) opsi menampilkan byte dalam file dalam baris 16, dengan ekuivalen ASCII biasa (jika ada) ditampilkan di akhir baris. Jika tidak ada karakter ASCII yang sesuai, tanda titik “.
” ditampilkan sebagai gantinya.
hexdump -C unicode.txt
Dalam ASCII, nilai heksadesimal dari 0x20
mewakili karakter ruang. Jika kita menghitung tiga nilai dari kiri, kita melihat nilai berikutnya adalah karakter spasi. Jadi tiga nilai pertama itu 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 bisa melihat karakter luar angkasa 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 dalam berkas. Menghitung dengan karakter memberi Anda banyak hal diwakili oleh isi 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 itu mengajukan 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 batal dihentikan, bukan Kereta kembali dihentikan. Artinya, setelah setiap nama file harus ada byte nol dari 0x00
alih-alih byte carriage return biasa 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.
Berikut file kami yang berisi nama file. Membukanya di less
menunjukkanmu yang aneh”^@
”karakter yang less
digunakan untuk menunjukkan byte nol.
less source-files-list.txt
Untuk menggunakan file dengan wc
kita perlu menggunakan --files0-from
(baca input dari) opsi dan berikan nama file yang berisi nama file.
wc ---files0-from=source-files-list.txt
File diproses persis seolah-olah disediakan di baris perintah.
Pemipaan Input ke wc
Cara yang jauh lebih umum, fleksibel, dan produktif untuk mengirim masukan ke wc
adalah untuk menyalurkan output dari perintah lain ke wc
. Kita dapat mendemonstrasikan ini dengan echo
memerintah.
echo "Count this for me" | wc
echo -e "Count this\nfor me" | wc
Kedua echo
perintah menggunakan -e
(karakter yang lolos) opsi untuk memungkinkan urutan yang lolos seperti “\n
” kode pemformatan baris baru. Ini menyuntikkan baris baru, menyebabkan wc
untuk melihat input sebagai dua baris.
Berikut adalah rangkaian perintah yang memberi masukan dari satu ke yang lain.
find ./* -type f | rev | cut -d'.' -f1 | rev | sort | uniq
- Temukan mencari file (
type -f
) secara rekursif, dimulai dari direktori saat ini.rev
membalikkan nama file. - memotong 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. - putaran membalikkan bidang pertama yang diekstraksi.
- menyortir mengurutkannya dalam urutan abjad.
- unik daftar entri unik ke jendela terminal.
Perintah ini mencantumkan semua ekstensi file unik di direktori saat ini dan subdirektori apa pun.
Jika kita menambahkan -c
(hitung) opsi ke uniq
perintah itu akan menghitung kejadian dari setiap jenis ekstensi. Tetapi jika kita ingin tahu berapa banyak ekstensi file yang unik dan berbeda, kita bisa drop wc
sebagai perintah terakhir di telepon, dan gunakan -l
(garis) pilihan.
find ./* -type f | rev | cut -d'.' -f1 | rev | sort | uniq | wc -l
TERKAIT: Cara Menggunakan Perintah potong Linux
Dan akhirnya
Ini satu trik terakhir wc
bisa lakukan 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
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