Jeg vil bruke AWK
for å få filnavn eller det siste mappenavnet hvis strengen bare er en katalog.
Jeg har:
awk -F "/" "{print $NF}"
for å skrive ut den siste kolonnen og:
awk -F "/" "{print $(NF - 1)}
for å skrive ut en kolonne før den siste.
Hvordan kan jeg lage awk
gjenkjenne hvis strengen bare inneholder en katalog og ikke noe filnavn og i dette tilfellet skrive ut en kolonne før den siste.
Problemet mitt er at en katalog kan se ut som:
./folder1/folder2/folder3/
og i dette tilfellet ville den siste kolonnen være tom. Jeg vil at awk
skal gjenkjenne dette og deretter skrive ut folder3
(altså en kolonne før den siste).
Svar
Du kan enten bruke if
eller operatøren ?:
for dette.
awk -F "/" "{print $NF == "" ? $(NF - 1) : $NF}"
awk -F "/" "{if($NF == "") print $(NF - 1); else print $NF}"
Kommentarer
Svar
Med GNU-verktøy, se også:
xargs -rd "\n" basename -a --
Som på en list.txt
-inngang som:
./folder1/folder2/folder3/ ./foo bar/// /
gir:
folder3 foo bar /
zsh
«s :t
modifikator (fra csh
) gir ""
for "/"
i stedet for "/"
$ printf "<%s>\n" "${(@)${(f)$(<list.txt)}:t}" <folder3> <foo> <bar> <>
Svar
prøv
(jeg kunne ikke teste det skjønt).
Svar
I skallet:
$ basename ./folder1/folder2/folder3/ folder3
Tilordne til en variabel ved å bruke basename
med en variabel som inneholder en stinavn:
filename=$( basename "$pathname" )
basename
verktøyet er POSIX-verktøy .
Kommentarer
- thx, spørsmålet mitt har fått litt mye på bruken av
AWK
, å brukebasename
er mye enklere.
test ? true : false
er et smart valg.