Ini adalah data yang ingin saya urutkan. Tetapi sort
memperlakukan numerik menjadi string, data itu tidak diurutkan seperti yang saya harapkan.
/ home / files / profile1
/ home / files / profile10
/ home / files / profile11
/ home / files / profile12
/ home / files / profile14
/ home / files / profile15
/ home / files / profile16
/ home / files / profile2
/ home / files / profile3
/ home / files / profile4
/ home / files / profile5
/ home / files6
/ home / files / profile7
/ home / files / profile8
/ home / files / profile9
Saya ingin menyortir ini,
/ home / files / profile1
/ home / files / profile2
/ home / files / profile3
/ home / files / profile4
/ home / files / profile5
/ home / files / profile6
/ home / files / profile7
/ home / files / profile8
/ home / files / profile9
/ home / files / profile10
/ home / files / profile11
/ home / files / profile12
/ home / files / profile14
/ home / files / profile15
/ home / files / profile16
Apakah ada cara yang baik dengan skrip bash? Saya tidak dapat menggunakan skrip ruby atau python di sini.
sumber
sort -V
akan lakukan.Jawaban:
Anda dapat menggunakan karakter sementara untuk membatasi nomor:
Di sini, karakter penjaga adalah ';' - itu tidak boleh menjadi bagian dari nama file yang ingin Anda urutkan - tetapi Anda dapat menukar ';' dengan karakter apa pun yang Anda suka. Anda harus mengubah
sed
,sort
dantr
berpisah kemudian.Pipa berfungsi sebagai berikut:
sed
Perintah menyisipkan sentinel sebelum nomor apa pun,sort
perintah menafsirkan sentinel sebagai pembatas bidang, mengurutkan dengan bidang kedua sebagai kunci pengurutan numerik dantr
perintah menghilangkan sentinel lagi.Dan
log
menunjukkan file input - Anda juga dapat memasukkan input Anda kesed
.sumber
Ini sangat mirip dengan pertanyaan ini . Masalahnya adalah bahwa Anda memiliki bidang alfanumerik yang sedang Anda sortir, dan
-n
tidak memperlakukannya dengan masuk akal, namun versi sortir (-V
) tidak. Jadi gunakan:Perhatikan bahwa fitur ini saat ini didukung oleh implementasi semacam GNU, FreeBSD dan OpenBSD.
sumber
sort -V
tidaksort -v
. Sulit untuk mengatakan pada pandangan pertama.Jika semua nama file Anda memiliki awalan yang sama sebelum bagian numerik akhir, abaikan saja saat menyortir:
(20 adalah posisi digit pertama. Satu ditambah panjang
/home/files/profile
.)Jika Anda memiliki beberapa bagian non-numerik yang berbeda, masukkan sentinel .
sumber