Quiero usar AWK
para obtener el nombre de archivo o el nombre de la última carpeta si la cadena es solo un directorio.
Tengo:
awk -F "/" "{print $NF}"
para imprimir la última columna y:
awk -F "/" "{print $(NF - 1)}
para imprimir una columna antes de la última.
¿Cómo puedo hacer awk
reconocer si la cadena contiene solo un directorio y ningún nombre de archivo y en este caso imprimir una columna antes de la última.
Mi problema es que un directorio puede verse así:
./folder1/folder2/folder3/
y en este caso la última columna estaría vacía. Quiero que awk
reconozca esto y luego imprima folder3
(una columna antes de la última).
Respuesta
Puede usar if
o el operador ?:
para esto.
awk -F "/" "{print $NF == "" ? $(NF - 1) : $NF}"
awk -F "/" "{if($NF == "") print $(NF - 1); else print $NF}"
Comentarios
Respuesta
Con las utilidades GNU, vea también:
xargs -rd "\n" basename -a --
Que en una list.txt
entrada como:
./folder1/folder2/folder3/ ./foo bar/// /
da:
folder3 foo bar /
zsh
«s :t
modificador (de csh
) da ""
para "/"
en lugar de "/"
$ printf "<%s>\n" "${(@)${(f)$(<list.txt)}:t}" <folder3> <foo> <bar> <>
Responder
prueba
(aunque no pude probarlo).
Responder
En el shell:
$ basename ./folder1/folder2/folder3/ folder3
Asignar a una variable, usando basename
con una variable que contiene un nombre de ruta:
filename=$( basename "$pathname" )
La utilidad basename
es un estándar Utilidad POSIX .
Comentarios
- gracias, mi pregunta ha ido ganando un poco más en el uso de
AWK
, usarbasename
es mucho más simple.
test ? true : false
es una elección inteligente.