perintah sort di unix dengan sorting numerik

10

Saya punya file1:

"$lvl=57"
"$lvl=20"
"$lvl=48"
"$lvl=17"
"$lvl=58"

File2 yang saya inginkan:

"$lvl=17"
"$lvl=20"
"$lvl=48"
"$lvl=57"
"$lvl=58"

Pada dasarnya mengurutkan file1 secara numerik.

yisha
sumber
Ketika saya menjalankan Unix biasa sortpada File1 Anda, tanpa opsi, saya mendapatkan File2 Anda. Apa yang kamu lakukan secara berbeda? Apa yang Anda tinggalkan dari pertanyaan ini?
Scott

Jawaban:

17

Saya suka -V --version-sort: ini berperilaku sangat baik untuk banyak situasi yang menggabungkan string dan angka

sort -V

Saya menggunakan opsi ini sangat sering ...

Di beberapa arah, ls -vuntuk versi-sortir ls.

Joao
sumber
10

Anda perlu memberi tahu sort -nuntuk menyortir bagian setelah =:

sort -t = -k 2n
Stéphane Chazelas
sumber
Saya baru-baru ini mencari ini ^^. Tapi satu lagi Q. Apa yang harus dilakukan -k2n? Apakah itu terkait dengan pengurutan angka? Terima kasih.
αғsнιη
2
@KasiyA -kmendefinisikan kunci pengurutan. Lihat halaman manual untuk detailnya. -k2nmendefinisikan kunci pengurutan mulai dari bidang kedua dan berakhir di akhir baris dan menjadikannya kunci pengurutan angka.
Stéphane Chazelas
0

gunakan sortir:

sort -n file1 > file2

-n, --numeric-sort
membandingkan menurut nilai numerik string

 sort -g file1 > file 2

-g, --general-numeric-sort

Hackaholic
sumber
3
Tidak, semua baris tersebut memiliki peringkat yang sama sort -nkarena mereka tidak memulai dengan angka. Alasannya memilah mereka adalah jenis garis penuh resor-terakhir (leksikal, tidak numerik) dilakukan untuk baris dengan peringkat yang sama. Itu akan menyortir "$lvl=17"sebelumnya "$lvl=2".
Stéphane Chazelas
@ StéphaneChazelas terima kasih telah menunjukkan.
Hackaholic
Mengutip, -ndan -gberlebihan di sini karena input tidak numerik. Jadi jawaban ini menyesatkan, maka downvote (perhatikan juga -gdan opsi panjangnya khusus untuk GNU).
Stéphane Chazelas
tapi -g adalah jenis umum-numerik yang bagus
Hackaholic
Itu masih untuk mengurutkan nilai numerik, bedanya -nadalah bahwa itu tidak terbatas pada bilangan bulat desimal. Itu masih akan disortir "$lvl=17"sebelumnya "$lvl=2"sebagai bagian dari penyortiran resor terakhir.
Stéphane Chazelas
0

Saya menemukan bahwa, Anda jalankan saja sort -h, itu akan berhasil. Mereka menyebutnya --human-numberic-sort.

sort -h file1 > file2
vincent pham
sumber
-1

sort -nadalah apa yang ingin Anda gunakan. Ini semacam kita mengurutkan angka.sort -k 2 -n file1

Cosmo
sumber
2
Tetapi OP ingin menyortir dalam urutan menaik, yang merupakan default. Mengapa Anda menyarankan pesanan terbalik?
G-Man Mengatakan 'Reinstate Monica'
di atas benar ketika bidang dipisahkan dengan tab atau spasi dan tidak akan berfungsi dalam kasus OP.
αғsнιη