Ik wil AWK
gebruiken om de bestandsnaam of de naam van de laatste map als de tekenreeks alleen een map is.
Ik heb:
awk -F "/" "{print $NF}"
om de laatste kolom af te drukken en:
awk -F "/" "{print $(NF - 1)}
om één kolom voor de laatste af te drukken.
Hoe kan ik awk
herken of de string alleen een map en geen bestandsnaam bevat en in dit geval één kolom voor de laatste afdrukken.
Mijn probleem is dat een map er als volgt uit kan zien:
./folder1/folder2/folder3/
en in dit geval zou de laatste kolom leeg zijn. Ik wil dat awk
dit herkent en vervolgens folder3
afdrukt (dus een kolom voor de laatste).
Answer
Je kunt if
of de ?:
operator gebruiken hiervoor.
awk -F "/" "{print $NF == "" ? $(NF - 1) : $NF}"
awk -F "/" "{if($NF == "") print $(NF - 1); else print $NF}"
Reacties
Antwoord
Zie ook voor GNU-hulpprogrammas:
xargs -rd "\n" basename -a --
Welke op een list.txt
invoer zoals:
./folder1/folder2/folder3/ ./foo bar/// /
geeft:
folder3 foo bar /
zsh
“s :t
modifier (van csh
) geeft ""
voor "/"
in plaats van "/"
$ printf "<%s>\n" "${(@)${(f)$(<list.txt)}:t}" <folder3> <foo> <bar> <>
Antwoord
probeer
(ik kon het echter niet “testen).
Antwoord
In de shell:
$ basename ./folder1/folder2/folder3/ folder3
Toewijzen aan een variabele, gebruik basename
met een variabele die een padnaam:
filename=$( basename "$pathname" )
Het basename
hulpprogramma is een standaard POSIX-hulpprogramma .
Reacties
- thx, mijn vraag wint een beetje aan het gebruik van
AWK
, het gebruik vanbasename
is veel eenvoudiger.
test ? true : false
is een slimme keuze.