GNU/Linux >> Belajar Linux >  >> Linux

Menyortir pada bidang terakhir dari suatu baris

awk '{print $NF,$0}' file | sort | cut -f2- -d' '

Pada dasarnya, perintah ini berfungsi:

  1. Ulangi kolom terakhir di awal, dipisahkan dengan spasi putih (OFS default)
  2. Sortir, selesaikan nama file duplikat menggunakan jalur lengkap ($0) untuk penyortiran
  3. 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

Linux
  1. Menghitung Karakter Setiap Baris Dengan Wc?

  2. Urutkan Tapi Pertahankan Baris Header Di Atas?

  3. Ganti Semua Baris Baru Ke Spasi Kecuali Yang Terakhir?

  1. Tambahkan Teks yang Cocok Ke Baris?

  2. Menyortir dalam bash

  3. Cara menemukan bidang terakhir menggunakan 'potong'

  1. 8 tips untuk baris perintah Linux

  2. Bagaimana cara mencetak baris terakhir dari file terkompresi gz di baris perintah?

  3. Bagaimana mengurutkan keluaran ini 1,10,11..2