Jeg vil bruge AWK
for at få filnavn eller det sidste mappenavn, hvis strengen kun er et bibliotek.
Jeg har:
awk -F "/" "{print $NF}"
til at udskrive den sidste kolonne og:
awk -F "/" "{print $(NF - 1)}
for at udskrive en kolonne før den sidste.
Hvordan kan jeg lave awk
genkende, om strengen kun indeholder et bibliotek og intet filnavn og i dette tilfælde udskrive en kolonne før den sidste.
Mit problem er, at en mappe kan se ud:
./folder1/folder2/folder3/
og i dette tilfælde ville den sidste kolonne være tom. Jeg vil have awk
til at genkende dette og derefter udskrive folder3
(så en kolonne før den sidste).
Svar
Du kan enten bruge if
eller ?:
-operatøren til dette.
awk -F "/" "{print $NF == "" ? $(NF - 1) : $NF}"
awk -F "/" "{if($NF == "") print $(NF - 1); else print $NF}"
Kommentarer
Svar
Med GNU-hjælpeprogrammer se også:
xargs -rd "\n" basename -a --
Hvilket på en list.txt
-indgang som:
./folder1/folder2/folder3/ ./foo bar/// /
giver:
folder3 foo bar /
zsh
“s :t
modifikator (fra csh
) giver ""
til "/"
i stedet for "/"
$ printf "<%s>\n" "${(@)${(f)$(<list.txt)}:t}" <folder3> <foo> <bar> <>
Svar
prøv
(jeg kunne dog ikke teste det).
Svar
I skallen:
$ basename ./folder1/folder2/folder3/ folder3
Tildeling til en variabel ved hjælp af basename
med en variabel, der indeholder en stienavn:
filename=$( basename "$pathname" )
basename
-værktøjet er POSIX-værktøj .
Kommentarer
- thx, mit spørgsmål har fået lidt meget på brugen af
AWK
at brugebasename
er meget enklere.
test ? true : false
er et klogt valg.