Jag vill använda AWK
för att få filnamn eller det sista mappnamnet om strängen bara är en katalog.
Jag har:
awk -F "/" "{print $NF}"
för att skriva ut den sista kolumnen och:
awk -F "/" "{print $(NF - 1)}
för att skriva ut en kolumn före den sista.
Hur kan jag göra awk
känna igen om strängen bara innehåller en katalog och inget filnamn och i det här fallet skriva ut en kolumn före den sista.
Mitt problem är att en katalog kan se ut:
./folder1/folder2/folder3/
och i det här fallet skulle den sista kolumnen vara tom. Jag vill att awk
ska känna igen detta och sedan skriva ut folder3
(så en kolumn före den sista).
Svar
Du kan antingen använda if
eller operatorn ?:
för detta.
awk -F "/" "{print $NF == "" ? $(NF - 1) : $NF}"
awk -F "/" "{if($NF == "") print $(NF - 1); else print $NF}"
Kommentarer
Svar
Med GNU-verktyg se även:
xargs -rd "\n" basename -a --
Vilket på en list.txt
-ingång som:
./folder1/folder2/folder3/ ./foo bar/// /
ger:
folder3 foo bar /
zsh
”s :t
modifierare (från csh
) ger ""
för "/"
istället för "/"
$ printf "<%s>\n" "${(@)${(f)$(<list.txt)}:t}" <folder3> <foo> <bar> <>
Svar
försök
(jag kunde dock inte testa det).
Svar
I skalet:
$ basename ./folder1/folder2/folder3/ folder3
Tilldelning till en variabel med basename
med en variabel som innehåller en söknamn:
filename=$( basename "$pathname" )
basename
-verktyget är en standard POSIX-verktyg .
Kommentarer
- thx, min fråga har fått lite mycket på användningen av
AWK
, att användabasename
är mycket enklare.
test ? true : false
är ett smart val.