Estoy tratando de usar awk
para obtener el nombre de un archivo dada la ruta absoluta al archivo.
Por ejemplo, cuando me dan la ruta de entrada que /home/parent/child/filename
me gustaría obtener, filename
lo he intentado:
awk -F "/" '{print $5}' input
que funciona perfectamente.
Sin embargo, estoy codificando, lo $5
cual sería incorrecto si mi entrada tiene la siguiente estructura:
/home/parent/child1/child2/filename
Entonces, una solución genérica requiere tomar siempre el último campo (que será el nombre del archivo).
¿Existe una forma sencilla de hacer esto con la función awk substr?
basename
es la forma oficial de hacer esto, usarawk
para esto no es bueno para decirlo a la ligera. : DRespuestas:
Utilice el hecho de que
awk
divide las líneas en los campos según un separador de campo, que puede definir. Por lo tanto, al definir el separador de campo/
, puede decir:En cuanto
NF
al número de campos del registro actual, imprimir$NF
significa imprimir el último.Entonces, dado un archivo como este:
Esta sería la salida:
fuente
$(NF-1)
.En este caso, es mejor usar en
basename
lugar deawk
:fuente
dirname
hace lo contrario y elimina el archivo, no la ruta.Otra opción es utilizar la
bash
sustitución de parámetros .fuente
Si está abierto a una solución de Perl, aquí hay una similar a la solución awk de fedorqui:
-F/
especifica/
que el separador de campo$F[-1]
es el último elemento de la@F
matriz autosplitfuente
Debería ser un comentario a la respuesta del nombre de base, pero no tengo suficiente sentido.
Si no usa comillas dobles,
basename
no funcionará con la ruta donde hay un carácter de espacio:ok con comillas ""
ejemplo de archivo
fuente
Sé que estoy como 3 años tarde en esto, pero ... debería considerar la expansión de parámetros, está integrada y es más rápida.
si su entrada está en una var, digamos, $ var1, simplemente hágalo
${var1##*/}
. Mira abajofuente
Como 5 años tarde, lo sé, gracias por todas las propuestas, solía hacer esto de la siguiente manera:
Me alegra notar que hay mejores modales
fuente
También puedes usar:
o
fuente