awk '{print $NF,$0}' file | sort | cut -f2- -d' '
Pada dasarnya, perintah ini berfungsi:
- Ulangi kolom terakhir di awal, dipisahkan dengan spasi putih (OFS default)
- Sortir, selesaikan nama file duplikat menggunakan jalur lengkap ($0) untuk penyortiran
- Potong kolom pertama yang berulang, f2- artinya dari kolom kedua ke kolom terakhir
One-liner di perl untuk membalik urutan bidang dalam satu baris:
perl -lne 'print join " ", reverse split / /'
Anda dapat menggunakannya sekali, menyalurkan output untuk mengurutkan, lalu menyalurkannya kembali dan Anda akan mencapai apa yang Anda inginkan. Anda dapat mengubah / /
ke / +/
sehingga meremas ruang. Dan tentu saja Anda bebas menggunakan ekspresi reguler apa pun yang Anda inginkan.
sesuatu seperti ini
awk '{print $NF"|"$0}' file | sort -t"|" -k1 | awk -F"|" '{print $NF }'
Inilah baris perintah Perl (perhatikan bahwa shell Anda mungkin mengharuskan Anda untuk keluar dari $
s):
perl -e "print sort {(split '/', $a)[-1] <=> (split '/', $b)[-1]} <>"
Cukup kirimkan daftar ke dalamnya atau, jika daftar tersebut ada dalam file, masukkan nama file di akhir baris perintah.
Perhatikan bahwa skrip ini tidak benar-benar mengubah data, jadi Anda tidak perlu berhati-hati dengan pembatas yang Anda gunakan.
Berikut contoh keluarannya:
>perl -e "print sort {(split '/', $a)[-1] <=> (split '/', $b)[-1]} " files.txt /a/e/f/g/h/01-do-this-first /a/b/c/10-foo /a/b/c/20-bar /a/d/30-bob /a/b/c/50-baz /a/e/f/g/h/99-local