Saya punya file yang dipisahkan koma yang terlihat seperti ini:
100,00869184
6492,8361
1234,31
200,04071
Saya ingin menggunakan sort
untuk mengurutkan file ini secara numerik dengan kolom pertama saja .
Hasil yang diinginkan:
100,00869184
200,04071
1234,31
6492,8361
Bagaimana cara mencapai ini menggunakan sortir? Sepertinya koma diperlakukan seperti ribuan pemisah dan bukan pembatas bahkan ketika saya memanggil mereka seperti itu.
Keduanya sort -t',' -n
dan sort -t',' -nk1'
berikan saya ini:
1234,31
200,04071
6492,8361
100,00869184
Mengurutkan secara default (tanpa parameter) atau menggunakan sort -t','
memberi saya ini:
100,00869184
1234,31
200,04071
6492,8361
Dan menyortir sebagai angka sort -n
memberi saya ini:
1234,31
200,04071
6492,8361
100,00869184
Bagaimana saya bisa menggunakan sortir untuk mencapai hasil yang saya inginkan?
Diedit untuk menambahkan: Ini untuk operasi satu kali untuk membuat daftar yang diurutkan sekitar 7 juta baris, sehingga solusi atau metode ortodoks lainnya dapat diterima.
-t
opsi memiliki ruang antara-t
dan karakterJawaban:
Ini tentu saja merupakan solusi kotor, tapi saya menemukan cara untuk melakukan ini berkat tip @ slhck tentang lokal. Jika jawaban yang lebih baik datang yang akan lebih membantu orang lain, saya pasti akan menerimanya karena ini hanya berfungsi untuk masalah spesifik saya.
Saya mengatur lokal ke Spanyol (Bolivia) sehingga koma diperlakukan seperti titik desimal, kemudian pengurutan angka standar melakukan trik.
sumber
GNU
sort
melakukan ini secara default:Versi: kapan:
Namun ada peringatan: Jika penyortiran Anda tidak berfungsi seperti yang diharapkan, maka Anda
locale
mungkin diatur untuk sesuatu yang berbeda dariC
. Kenapa ini?locale
mendefinisikan pengurutan dan interpretasi huruf, angka, karakter desimal dan sebagainya.Untuk memeriksanya, cukup masukkan
locale
di Terminal. ApakahLC_NUMERIC
diatur keen_US.UTF-8
, mungkin? Ini akan menjelaskan urutan sortir yang salah. Kembalikan keC
:Kemudian, coba
sort
perintah Anda lagi. Jika Anda ingin mengatur Anda global yanglocale
untukC
, melakukan hal ini dengan:sumber
locale
masalah. Tapi untuk apasort --version
kamu sebenarnya?--
perintah juga tidak bekerja untuk saya di masa lalu. Saya memeriksa halaman manual dan tidak ada versi yang dipanggil secara eksplisit, tetapi ada daftar "HP-UX 11i Versi 2: Agustus 2003" jika itu membantu sama sekali. LC_NUMERIC saya disetel ke "C".,
sebagai pemisah desimal. Saya tidak pernah menggunakan HP-UX.Coba tambahkan
-g
opsi yang seharusnya melakukan pengurutan angka.Mencoba:
sumber
-n
pengurutan numerik? -g memberi saya opsi ilegal.-g
adalahgeneral-numeric-sort
opsi dan harus benar - benar tersedia dalam versi terbaru darisort
. @dpatcheryGanti delimeter:
- harus membantu kamu.
sumber