Vreau să folosesc AWK pentru a obține numele fișierului sau numele ultimului dosar dacă șirul este doar un director.
Am:
awk -F "/" "{print $NF}"
pentru a imprima ultima coloană și:
awk -F "/" "{print $(NF - 1)}
pentru a imprima o coloană înainte de ultima.
Cum pot face awk recunoașteți dacă șirul conține doar un director și niciun nume de fișier și, în acest caz, tipăriți o coloană înainte de ultima.
Problema mea este că un director ar putea arăta ca:
./folder1/folder2/folder3/
și în acest caz ultima coloană ar fi goală. Vreau ca awk să recunoască acest lucru și apoi să imprime folder3 (deci cu o coloană înainte de ultima).
Răspuns
Puteți utiliza fie if, fie operatorul ?: pentru aceasta.
awk -F "/" "{print $NF == "" ? $(NF - 1) : $NF}"
awk -F "/" "{if($NF == "") print $(NF - 1); else print $NF}"
Comentarii
Răspuns
Cu utilitarele GNU vezi și:
xargs -rd "\n" basename -a --
Care pe o intrare list.txt ca:
./folder1/folder2/folder3/ ./foo bar/// /
oferă:
folder3 foo bar /
zsh „s :t modificator (din csh) dă "" pentru "/" în loc de "/"
$ printf "<%s>\n" "${(@)${(f)$(<list.txt)}:t}" <folder3> <foo> <bar> <>
Răspuns
încercați
(totuși nu am putut să-l testez).
Răspuns
În shell:
$ basename ./folder1/folder2/folder3/ folder3
Atribuirea unei variabile, utilizând basename cu o variabilă care deține un calea:
filename=$( basename "$pathname" )
Utilitarul basename este un standard Utilitar POSIX .
Comentarii
- thx, întrebarea mea a câștigat ceva mai mult în ceea ce privește utilizarea
AWK, utilizareabasenameeste mult mai simplă.
test ? true : falseeste o alegere inteligentă.