Quero usar AWK
para obter o nome do arquivo ou o nome da última pasta se a string for apenas um diretório.
Eu tenho:
awk -F "/" "{print $NF}"
para imprimir a última coluna e:
awk -F "/" "{print $(NF - 1)}
para imprimir uma coluna antes da última.
Como posso fazer awk
reconhecer se a string contém apenas um diretório e nenhum nome de arquivo e, neste caso, imprimir uma coluna antes da última.
Meu problema é que um diretório pode ser semelhante a:
./folder1/folder2/folder3/
e, neste caso, a última coluna estaria vazia. Quero que awk
reconheça isso e imprima folder3
(uma coluna antes da última).
Resposta
Você pode usar if
ou o operador ?:
para isso.
awk -F "/" "{print $NF == "" ? $(NF - 1) : $NF}"
awk -F "/" "{if($NF == "") print $(NF - 1); else print $NF}"
Comentários
Resposta
Com os utilitários GNU, veja também:
xargs -rd "\n" basename -a --
Que em uma list.txt
entrada como:
./folder1/folder2/folder3/ ./foo bar/// /
dá:
folder3 foo bar /
zsh
“s :t
modificador (de csh
) dá ""
para "/"
em vez de "/"
$ printf "<%s>\n" "${(@)${(f)$(<list.txt)}:t}" <folder3> <foo> <bar> <>
Resposta
experimente
(não fui capaz de testá-lo).
Resposta
No shell:
$ basename ./folder1/folder2/folder3/ folder3
Atribuindo a uma variável, usando basename
com uma variável que contém um nome do caminho:
filename=$( basename "$pathname" )
O utilitário basename
é um padrão Utilitário POSIX .
Comentários
- thx, minha pergunta tem ganhado muito com o uso de
AWK
, usarbasename
é muito mais simples.
test ? true : false
é uma escolha inteligente.