Bug semacam atau kesalahpahaman

3

Misalkan saya punya file ini

b 10 foo
a 10 bar
a 2 bar

Saya ingin mengurutkan berdasarkan kolom ketiga, berdasarkan abjad. Dalam hal ikatan, saya ingin mengurutkan berdasarkan kolom kedua, secara numerik. Di halaman manual untuk program sortir unix Anda menemukan ini:

> sort -k3 -k2n a

Pemberian yang mana

a 2 bar
a 10 bar
b 10 foo

Yang mana yang benar.

Sekarang, apa yang sebenarnya saya inginkan, adalah mengurutkan berdasarkan kolom pertama, berdasarkan abjad, dan jika ada ikatan, dengan kolom kedua, secara numerik. Adakah yang bisa menjelaskan mengapa

> sort -k1 -k2n a

Memberi

a 10 bar
a 2 bar
b 10 foo

Mana yang salah?

gaston
sumber
1
coba -k1,1 -k2,2n tetapi ini benar-benar lebih merupakan pertanyaan pengguna super karena tidak ada pemrograman yang dilakukan
frankc

Jawaban:

2

Alasan contoh Anda tidak berfungsi seperti yang Anda harapkan adalah itu sort mempertimbangkan semua posisi setelah yang ditentukan juga. Dalam contoh Anda, jenis kamus dari -k1 macam string a 10 bar sebelum a 2 bar, dan Anda tidak perlu istirahat.

Anda perlu secara eksplisit menentukan batas kunci pengurutan, seperti yang dijelaskan dalam halaman manual:

   -k, --key=POS1[,POS2]
          start a key at POS1, end it at POS2 (origin 1)

Contoh:

$ sort -k1,1 -k2n theFile
a 2 bar
a 10 bar
b 10 foo
Daniel Beck
sumber
Terima kasih! Saya pikir saya hanya perlu POS2 jika saya ingin menyortir menggunakan berbagai kolom dan melewatkan perilaku penyortiran default menggunakan sisa baris dari POS1 untuk menyortir! Sekarang ini berfungsi seperti pesona.
gaston