Perkakas sort, uniq, wc, dan cut membentuk satu kelompok alat penghitungan teks: sort mengurutkan baris, uniq mengelompokkan baris yang sama, wc menghitung baris, kata, dan byte, sedangkan cut memotong kolom tertentu. Masing-masing dapat bekerja sendiri, tetapi kekuatan sebenarnya muncul ketika keempatnya dirangkai menjadi laporan. Topik ini membahas perilaku masing-masing perintah beserta satu contoh laporan akhir yang merangkai semuanya.
Mengurutkan dengan sort#
Perintah sort mengurutkan setiap baris masukan secara leksikografis, yaitu mengikuti urutan karakter dari kiri ke kanan, kemudian mencetak hasilnya. Contoh berikut memakai pinjaman.txt, berkas catatan peminjaman buku dengan dua kolom yang dipisahkan koma, yaitu nama peminjam dan judul buku.
# menyiapkan folder kerja dan berkas contoh
mkdir -p /tmp/kerja-sort-uniq-wc-cut
cd /tmp/kerja-sort-uniq-wc-cut
printf 'Ali,Fisika\nBudi,Biologi\nCitra,Fisika\nDewi,Sejarah\nAli,Matematika\nEko,Biologi\nCitra,Matematika\nBudi,Fisika\n' > pinjaman.txt
cat pinjaman.txtAli,Fisika
Budi,Biologi
Citra,Fisika
Dewi,Sejarah
Ali,Matematika
Eko,Biologi
Citra,Matematika
Budi,Fisikacd /tmp/kerja-sort-uniq-wc-cut
# mengurutkan seluruh baris dari kiri ke kanan
sort pinjaman.txt
# mengurutkan berdasarkan kolom kedua
sort -t',' -k2 pinjaman.txtAli,Fisika
Ali,Matematika
Budi,Biologi
Budi,Fisika
Citra,Fisika
Citra,Matematika
Dewi,Sejarah
Eko,Biologi
Budi,Biologi
Eko,Biologi
Ali,Fisika
Budi,Fisika
Citra,Fisika
Ali,Matematika
Citra,Matematika
Dewi,SejarahOpsi -t',' menetapkan koma sebagai pemisah kolom, sedangkan -k2 memilih kolom kedua sebagai kunci urutan. Hasil pertama mengurutkan berdasarkan nama, sedangkan hasil kedua mengelompokkan catatan berdasarkan judul buku. Opsi -r membalik urutan menjadi menurun bila dibutuhkan, sedangkan opsi -u mengurutkan sekaligus membuang baris duplikat dalam satu langkah.
Urutan numerik dengan -n#
Urutan leksikografis keliru untuk angka: teks 100 dianggap lebih kecil daripada 9 karena karakter 1 mendahului 9. Opsi -n memerintahkan sort membandingkan kunci secara numerik. Contoh berikut memakai pengunjung.txt yang mencatat jumlah pengunjung perpustakaan selama lima hari.
cd /tmp/kerja-sort-uniq-wc-cut
# menyiapkan berkas jumlah pengunjung
printf 'hari1 9\nhari2 78\nhari3 85\nhari4 100\nhari5 74\n' > pengunjung.txt
# urutan leksikografis: keliru untuk angka
sort -k2 pengunjung.txt
# urutan numerik: sesuai nilai
sort -k2 -n pengunjung.txthari4 100
hari5 74
hari2 78
hari3 85
hari1 9
hari1 9
hari5 74
hari2 78
hari3 85
hari4 100Keluaran pertama menempatkan hari dengan 100 pengunjung di paling atas karena teksnya diurutkan lebih dahulu, sedangkan keluaran kedua menempatkannya di paling bawah sesuai nilainya. Opsi -n dapat dipasangkan dengan kunci kolom maupun dipakai sendiri pada berkas yang berisi angka per baris. Gabungan -n dan -r, yaitu sort -rn, menghasilkan urutan menurun secara numerik dan sering dipakai untuk menyusun peringkat.
Menghitung nilai unik dengan uniq#
Perintah uniq menggabungkan baris yang berulang, tetapi hanya pada baris yang berdampingan. Perilaku ini adalah sumber kekeliruan paling umum: tanpa pengurutan lebih dahulu, baris yang sama yang tersebar tidak terdeteksi.
cd /tmp/kerja-sort-uniq-wc-cut
# uniq tanpa pengurutan: baris terakhir tidak terdeteksi
printf 'ali\nbudi\nali\n' | uniq
# setelah diurutkan, baris yang sama menjadi berdampingan
printf 'ali\nbudi\nali\n' | sort | uniqali
budi
ali
ali
budiOpsi -c menambahkan hitungan kemunculan di depan setiap baris unik, dan pasangan sort | uniq -c menjadi pola standar penghitungan. Variannya uniq -d mencetak hanya baris yang berulang sehingga berguna untuk menguji keberadaan duplikat, sedangkan uniq -u mencetak hanya baris yang muncul satu kali.
cd /tmp/kerja-sort-uniq-wc-cut
# menghitung banyaknya kemunculan setiap nama
printf 'ali\nbudi\nali\n' | sort | uniq -c 2 ali
1 budiMenghitung baris, kata, dan byte dengan wc#
Perintah wc (word count, penghitung kata) melaporkan tiga bilangan sekaligus: banyaknya baris, kata, dan byte. Opsi -l, -w, dan -c memilih satu bilangan saja.
cd /tmp/kerja-sort-uniq-wc-cut
# melaporkan baris, kata, dan byte sekaligus
wc pinjaman.txt
# hanya banyaknya baris
wc -l pinjaman.txt
# hanya banyaknya byte
wc -c pinjaman.txt 8 8 106 pinjaman.txt
8 pinjaman.txt
106 pinjaman.txtHasilnya delapan baris, delapan kata, dan 106 byte. Jumlah kata sama dengan jumlah baris karena setiap baris berisi satu kata tanpa spasi. Bila beberapa berkas diberikan sekaligus, wc menambahkan satu baris total di akhir keluarannya. Apabila masukannya berupa pipe, wc hanya mencetak angkanya tanpa nama berkas, sehingga bentuk cat pinjaman.txt | wc -l menghasilkan keluaran 8 saja.
Memotong kolom dengan cut#
Perintah cut mengambil sebagian dari setiap baris. Opsi -d menetapkan pemisah kolom dan -f memilih nomor kolom, sedangkan -c memilih rentang karakter.
cd /tmp/kerja-sort-uniq-wc-cut
# mengambil kolom nama
cut -d',' -f1 pinjaman.txt
# mengambil kolom judul
cut -d',' -f2 pinjaman.txt
# mengambil tiga karakter pertama setiap baris
cut -c1-3 pinjaman.txtAli
Budi
Citra
Dewi
Ali
Eko
Citra
Budi
Fisika
Biologi
Fisika
Sejarah
Matematika
Biologi
Matematika
Fisika
Ali
Bud
Cit
Dew
Ali
Eko
Cit
BudOpsi -f2 menghasilkan kolom judul yang siap dihitung, sedangkan -c1-3 bekerja pada posisi karakter tanpa memedulikan pemisah. Baris yang tidak memuat pemisah diteruskan apa adanya oleh cut. Perilaku ini kadang menyembunyikan berkas yang formatnya tidak seragam, sehingga opsi -s perlu dipakai untuk menahan baris semacam itu agar hanya baris berpemisah yang dicetak. Selain satu nomor, -f juga menerima rentang seperti -f1-2 maupun beberapa kolom sekaligus seperti -f1,3. Untuk berkas yang pemisahnya tidak tetap, misalnya beberapa spasi berurutan, cut menjadi rapuh, sehingga awk dengan pemrosesan medannya lebih tepat dipakai.
Merangkai menjadi satu laporan#
Keempat perintah tersebut dirangkai dengan pipe menjadi satu laporan, yaitu judul buku yang paling banyak dipinjam beserta hitungannya. Alurnya: cut mengambil kolom judul, sort mengumpulkan judul yang sama agar berdampingan, uniq -c menghitungnya, dan sort -rn mengurutkan hasil hitungan dari yang terbesar.
cd /tmp/kerja-sort-uniq-wc-cut
# laporan buku terpopuler dari berkas pinjaman
cut -d',' -f2 pinjaman.txt | sort | uniq -c | sort -rn 3 Fisika
2 Matematika
2 Biologi
1 SejarahSatu baris perintah kini menjawab pertanyaan statistik sederhana terhadap berkas data. Setiap tahap pada rangkaian ini persis sama dengan yang dipraktikkan pada bagian-bagian sebelumnya, sehingga rangkaiannya dapat dibaca sebagai ringkasan seluruh topik dalam satu baris. Untuk berkas log yang kolomnya berbeda, hanya argumen cut yang perlu disesuaikan, sedangkan tiga tahap sisanya tetap dipakai apa adanya. Keluaran dengan hitungan terbesar di atas inilah bentuk paling sederhana dari laporan peringkat.
Kesalahan umum#
Kesalahan pertama adalah menjalankan uniq tanpa sort. Baris yang sama yang tidak berdampingan lolos dari penghitungan tanpa peringatan, sehingga hitungan pada laporan kurang dari seharusnya tetapi tidak terlihat salah. Memasangkan keduanya, sort | uniq -c, adalah kebiasaan yang perlu dibiasakan.
Kesalahan kedua adalah melupakan -n ketika kunci berupa angka. Urutan leksikografis menempatkan 100 sebelum 9, dan kekeliruan ini tidak menyebabkan error sehingga mudah lolos ke laporan akhir. Kesalahan ketiga adalah memakai cut -d' ' pada berkas yang spasinya tidak tetap, misalnya kolom yang dipisahkan dua spasi atau lebih. Pemisah tunggal membuat kolom kosong muncul dan nomor kolom bergeser, sedangkan awk yang memperlakukan spasi beruntun sebagai satu pemisah memberikan hasil yang lebih andal.
Ringkasan#
- sort mengurutkan baris secara leksikografis, dengan
-tdan-kuntuk memilih kunci kolom,-nuntuk urutan numerik, dan-runtuk membalik arah. - uniq hanya menganalisis baris yang berdampingan, sehingga selalu didahului sort, dan
-cmenambahkan hitungan kemunculan. - wc melaporkan banyaknya baris, kata, dan byte dengan opsi
-l,-w, dan-c, sedangkan cut memotong kolom dengan-ddan-fatau karakter dengan-c. - Rangkaian
cut | sort | uniq -c | sort -rnmembentuk laporan peringkat sederhana dari berkas data apa pun.
Referensi#
- sort invocation — GNU Coreutils Manual
— Dokumentasi resmi sort mengenai kunci urutan, opsi
-n, dan-r. - uniq invocation — GNU Coreutils Manual
— Dokumentasi resmi uniq mengenai aturan baris berdampingan dan opsi
-c. - wc invocation — GNU Coreutils Manual — Dokumentasi resmi wc mengenai hitungan baris, kata, dan byte.
- cut invocation — GNU Coreutils Manual — Dokumentasi resmi cut mengenai pemilihan kolom dan karakter.