Saya mencoba menggunakan awk
untuk mendapatkan nama file yang diberikan path absolut ke file tersebut.
Misalnya, ketika diberi jalur input yang /home/parent/child/filename
ingin filename
saya dapatkan, saya telah mencoba:
awk -F "/" '{print $5}' input
yang bekerja dengan sempurna.
Namun, saya melakukan pengkodean keras $5
yang akan salah jika masukan saya memiliki struktur berikut:
/home/parent/child1/child2/filename
Jadi solusi umum membutuhkan selalu mengambil bidang terakhir (yang akan menjadi nama file).
Apakah ada cara sederhana untuk melakukan ini dengan fungsi substr awk?
basename
adalah cara resmi untuk melakukan ini, menggunakanawk
untuk ini tidak baik untuk dianggap enteng. : DJawaban:
Gunakan fakta yang
awk
memisahkan garis dalam bidang berdasarkan pemisah bidang, yang bisa Anda tentukan. Karenanya, menentukan pemisah bidang untuk/
Anda dapat mengatakan:sebagaimana
NF
mengacu pada jumlah bidang dari rekaman saat ini, mencetak$NF
berarti mencetak yang terakhir.Jadi diberi file seperti ini:
Ini akan menjadi hasilnya:
sumber
$(NF-1)
.Dalam hal ini lebih baik digunakan
basename
daripadaawk
:sumber
dirname
melakukan hal yang sebaliknya dan menghapus file jalurnya.Pilihan lainnya adalah menggunakan
bash
substitusi parameter .sumber
Jika Anda terbuka untuk solusi Perl, berikut yang mirip dengan solusi awk fedorqui:
-F/
ditentukan/
karena pemisah bidang$F[-1]
adalah elemen terakhir dalam@F
larik pemisahan otomatissumber
Ini harus menjadi komentar untuk jawaban nama dasar tetapi saya belum cukup poin.
Jika Anda tidak menggunakan tanda kutip ganda,
basename
tidak akan berfungsi dengan jalur di mana ada karakter spasi:oke dengan tanda kutip ""
contoh file
sumber
Saya tahu saya seperti terlambat 3 tahun dalam hal ini tetapi .... Anda harus mempertimbangkan perluasan parameter, ini sudah ada di dalamnya dan lebih cepat.
jika masukan Anda dalam var, katakanlah, $ var1, lakukan saja
${var1##*/}
. Lihat ke bawahsumber
Seperti terlambat 5 tahun, saya tahu, terima kasih untuk semua proposal, saya biasa melakukan ini dengan cara berikut:
Senang melihat ada tata krama yang lebih baik
sumber
Anda juga bisa menggunakan:
atau
sumber