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 vanbasenameis veel eenvoudiger.
test ? true : falseis een slimme keuze.