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
, utilizareabasename
este mult mai simplă.
test ? true : false
este o alegere inteligentă.