Hasil tak terduga dari perintah sortir linux bash

0

Saya punya file foo.txt dengan konten ini:

chr1    15
chr11   5
chr11   8
chr1    7
chr2    23
chr1    35

Saya mencoba mengurutkannya terlebih dahulu sesuai dengan kolom pertama, dan kemudian menurut kolom kedua untuk memutuskan hubungan dengan perintah berikut di linux shell:

sort -k 1,1 -k 2,2n foo.txt

Tetapi hasilnya aneh:

chr1    7
chr1    15
chr11   5
chr11   8
chr1    35
chr2    23

Apa yang saya harapkan adalah ini:

chr1    7
chr1    15
chr1    35
chr11   5
chr11   8
chr2    23

EDIT Saya memeriksa karakter dalam file dengan od -fc foo.txt seperti yang disarankan dalam komentar, tidak ada karakter aneh. Inilah hasilnya:

0000000   3.5274972e-09   8.7240555e-33   3.5274972e-09    8.716562e-33
          c   h   r   1  \t   1   5  \n   c   h   r   1   1  \t   5  \n
0000020   3.5274972e-09   8.8610065e-33   3.5274972e-09   2.5496164e+21
          c   h   r   1   1  \t   8  \n   c   h   r   1  \t   7  \n   c
0000040   2.1479764e-33   2.5493397e+21   2.1359394e-33     9.37439e-40
          h   r   2  \t   2   3  \n   c   h   r   1  \t   3   5  \n
0000057

saya menggunakan sort (GNU coreutils) 8.21 Ada ide?

Ali
sumber
Hmm, saya mendapatkan hasil yang Anda harapkan, GNU sortir versi 8.21
glenn jackman
Apakah ada karakter aneh di file? Mencoba od -c foo.txt
glenn jackman
Output juga seperti yang diharapkan dengan Cygwin sort (GNU coreutils) 8.15
DavidPostill
@glennjackman Saya telah memperbarui pertanyaan sesuai dengan komentar Anda
Ali
@ DavidPostill Masalahnya memburuk! Saya kira saya kehilangan beberapa argumen input ...
Ali

Jawaban:

1

Tampaknya preferensi penyortiran tempat Anda masalah. Anda dapat menentukannya di lingkungan Anda, lalu perintah apa pun yang menggunakannya (termasuk sort ) akan mematuhinya:

export LC_COLLATE=C
sort -k 1,1 -k 2,2n foo.txt

Atau Anda dapat menentukan nilai itu hanya untuk durasi pengurutan itu sendiri

LC_COLLATE=C sort -k 1,1 -k 2,2n foo.txt       # or
env LC_COLLATE=C sort -k 1,1 -k 2,2n foo.txt
glenn jackman
sumber