Perintah sort Linux: urutkan teks, angka, dan kolom
Perintah sort mengurutkan baris teks dan mengirim hasilnya ke keluaran standar, biasanya layar terminal. Gunakan -n untuk mengurutkan nilai angka, -k untuk memilih kolom atau field pembanding, dan -r untuk membalik urutan. Perbandingan biasa tidak mengubah berkas masukan.
Urutan bawaan mengikuti locale, yaitu pengaturan lingkungan yang memengaruhi aturan perbandingan karakter dan angka. Untuk urutan berbasis nilai bita yang dapat diulang, gunakan awalan seperti LC_ALL=C sort names.txt. Locale C membantu menghasilkan urutan yang konsisten, tetapi bukan aturan pengurutan alami untuk semua bahasa.
Sintaks dasar
sort [OPSI]... [BERKAS]...
Jika tidak ada nama berkas, sort membaca masukan standar, misalnya data dari pipa. Beberapa nama berkas akan dibaca dan hasil gabungannya diurutkan. Contoh di sini memakai GNU sort; periksa sort --version, sort --help, dan man sort karena implementasi dan opsi dapat berbeda.
Contoh pengurutan berkas
Buat direktori latihan kosong agar berkas percobaan tidak menimpa data penting. Perintah printf pada persiapan berikut memakai pengalihan >, sehingga nama berkas yang sudah ada akan ditimpa.
Urutkan baris teks
Siapkan names.txt dengan printf 'zebra\napple\nbanana\n' > names.txt, lalu jalankan:
sort names.txt
Untuk data contoh tersebut, hasilnya apple, banana, lalu zebra, masing-masing pada baris sendiri. Program menganggap satu baris sebagai satu record atau entri. Isi names.txt tetap mengikuti urutan semula karena hasil belum ditulis ke berkas.
Urutkan berdasarkan nilai angka
Siapkan scores.txt dengan printf '10\n2\n1\n' > scores.txt. Dalam urutan teks dengan locale C, 10 berada sebelum 2. Agar nilainya dibandingkan sebagai angka, gunakan:
sort -n scores.txt
Hasilnya 1, 2, lalu 10 pada baris terpisah. Untuk urutan angka menurun, gunakan sort -nr scores.txt, yang menghasilkan 10, 2, lalu 1. Jangan menganggap -n membaca semua bentuk angka khusus; format dan tanda pemisah angka yang didukung perlu disesuaikan dengan manual serta locale masukan.
Urutkan berdasarkan field kedua
Untuk data nama dan nilai yang dipisahkan spasi, buat results.txt dengan printf 'Budi 10\nCici 2\nAni 2\n' > results.txt. Lalu bandingkan field kedua sebagai angka:
sort -k2,2n results.txt
Nomor field dimulai dari 1. Bentuk -k2,2n membatasi kunci ke field kedua dan menerapkan perbandingan angka pada kunci itu. Menulis hanya -k2 memperluas kunci sampai akhir baris, sehingga tidak selalu setara jika masih ada kolom lain.
Pada contoh ini, dua baris bernilai 2 berada sebelum Budi 10. GNU sort secara bawaan dapat membandingkan seluruh baris untuk memecahkan seri, sehingga Ani 2 mendahului Cici 2 dalam locale C. Jika kunci sama harus mempertahankan urutan masukan, gunakan sort -s -k2,2n results.txt; Cici 2 kemudian tetap mendahului Ani 2. Untuk kunci sekunder yang eksplisit, gunakan sort -k2,2n -k1,1 results.txt.
Melihat masukan dan hasil melalui pipa
Contoh berikut mengirim tiga baris langsung ke sort tanpa membuat berkas. Simbol | meneruskan keluaran printf sebagai masukan sort:
printf 'zebra\napple\nbanana\n' | sort
Hasilnya:
apple
banana
zebra
Untuk membuat locale pada tahap sort eksplisit, tulis printf 'zebra\napple\nbanana\n' | LC_ALL=C sort. Penetapan lingkungan itu berlaku untuk perintah sort tersebut. Jika membaca nama dari berkas dan ingin menyimpan hasil terpisah, gunakan sort names.txt > names-sorted.txt, kemudian periksa names-sorted.txt.
Opsi dan bentuk yang penting
| Opsi atau bentuk | Kegunaan |
|---|---|
-n |
Bandingkan menurut nilai angka yang didukung mode numerik. |
-r |
Balik arah hasil perbandingan. |
-k AWAL,AKHIR |
Tentukan rentang field kunci; nomor field dimulai dari 1. |
-u |
Sisakan satu baris untuk kunci pembanding yang sama. |
-t PEMISAH |
Gunakan karakter pemisah field yang ditentukan. |
-s |
Pertahankan urutan relatif masukan untuk kunci yang sama. |
-o BERKAS |
Tulis hasil ke berkas yang ditentukan. |
Secara bawaan, field dipisahkan menurut transisi spasi putih. Untuk masukan sederhana yang dipisahkan koma, bentuk seperti sort -t , -k2,2n pairs.csv memilih field kedua sebagai angka. Opsi -t bukan pembaca CSV lengkap: koma di dalam tanda kutip masih dapat dianggap pemisah, sehingga CSV dengan aturan pengutipan memerlukan alat yang memahami formatnya.
Hal yang perlu diperhatikan
Jangan alihkan keluaran langsung ke berkas masukan
Hindari bentuk sort names.txt > names.txt. Shell dapat mengosongkan berkas tujuan sebelum sort membacanya. Gunakan nama tujuan berbeda untuk meninjau hasil, atau gunakan opsi -o GNU sort sebagaimana dijelaskan pada FAQ. Cadangkan berkas penting sebelum menimpa hasil ke jalur aslinya.
Kunci yang sama belum tentu berarti seluruh baris sama
Opsi -u bekerja berdasarkan aturan perbandingan yang dipilih. Dengan sort -u -k2,2n results.txt, baris Cici 2 dan Ani 2 mempunyai kunci angka sama, sehingga hanya satu yang dipertahankan. Jika nama pada field lain penting, ini dapat menghilangkan data yang sebenarnya berbeda. Tanpa pembatas kunci, pengurutan teks biasa membandingkan seluruh baris.
Panduan uniq dalam bahasa Inggris menjelaskan alat berbeda untuk mengurangi duplikasi yang bersebelahan. Uniq tidak mengurutkan semua baris; duplikasi yang terpisah baris lain tidak otomatis digabungkan. Pilih urutan dan definisi kesamaan sesuai tujuan data.
Samakan locale dan bentuk masukan
Perubahan locale dapat mengubah urutan karakter. Untuk skrip yang harus dapat diulang, tetapkan lingkungan perbandingan secara eksplisit, misalnya LC_ALL=C, pada tahap yang memerlukannya. Jangan menyamakan urutan bita dengan urutan kamus bahasa tertentu. Pastikan pula setiap baris memiliki field yang sesuai agar -k menunjuk data yang benar.
FAQ
Bagaimana menyimpan hasil ke berkas asal?
Pada GNU sort dalam mode pengurutan biasa, gunakan sort -o names.txt names.txt. Cadangkan berkas penting terlebih dahulu, lalu periksa hasil dan status perintah. Cara ini berbeda dari mengalihkan keluaran dengan > ke masukan yang sama.
Dokumentasi
Rincian kunci, locale, dan opsi implementasi tersedia dalam manual GNU sort dari proyek Coreutils, ditayangkan di man7.




