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
AWKat brugebasenameer meget enklere.
test ? true : falseer et klogt valg.