Gunakan sort
's -k
pilihan untuk mengurutkan berdasarkan (beberapa) kolom sekaligus:
$ sort -k1,1 -k2n input
A 1-2
A 3-4
A 6-8
B 5-9
B 7-10
-k1,1
mengurutkan berdasarkan kolom pertama terlebih dahulu, kemudian -k2n
dengan kedua¹ secara numerik ketika kolom pertama diikat, sehingga Anda mendapatkan output sesuai urutan yang Anda inginkan: mengurutkan berdasarkan elemen pertama dari kolom kedua, hanya jika elemen kolom pertama sama.
Saat mengurutkan secara numerik, ia hanya akan memeriksa bidang sampai berhenti menjadi angka, sehingga memberi Anda perbandingan elemen pertama saja.
Ketika dua kunci membandingkan yang sama, kemudian sort
membandingkan garis penuh secara leksikal sebagai perbandingan terakhir. Misalnya dalam A 1-10
vs A 1-2
, kunci pertama identik ( A
string), dan kunci kedua juga (keduanya diperlakukan sebagai angka 1
), jadi kemudian sort
membandingkan A 1-10
vs A 1-2
leksikal dan yang terakhir lebih besar sebagai 2
jenis setelah 1
. Implementasi GNU sort
memiliki -V
opsi atau V
flag kunci untuk melakukan pengurutan versi , yang seperti perbandingan leksikal kecuali bahwa urutan angka desimal dalam string dibandingkan secara numerik, jadi sort -k1,1 -k2V
akan mengurutkan A 1-10
setelah A 1-2
karena 10
angka lebih besar dari 2
.
¹ secara teknis, -k2
berarti bagian dari garis yang dimulai dengan bidang kedua (setelah transisi pertama dari non-kosong ke kosong) dan berakhir pada akhir baris, tetapi dengan n
bendera, itu setara dengan -k2,2n
hanya sebagai bagian utama yang merupakan angka dianggap.