Estoy tratando de usar awkpara 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/filenameme gustaría obtener, filename
lo he intentado:
awk -F "/" '{print $5}' input
que funciona perfectamente.
Sin embargo, estoy codificando, lo $5cual 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?

basenamees la forma oficial de hacer esto, usarawkpara esto no es bueno para decirlo a la ligera. : DRespuestas:
Utilice el hecho de que
awkdivide 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
NFal número de campos del registro actual, imprimir$NFsignifica imprimir el último.Entonces, dado un archivo como este:
Esta sería la salida:
fuente
$(NF-1).En este caso, es mejor usar en
basenamelugar deawk:fuente
dirnamehace lo contrario y elimina el archivo, no la ruta.Otra opción es utilizar la
bashsustitució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@Fmatriz autosplitfuente
Debería ser un comentario a la respuesta del nombre de base, pero no tengo suficiente sentido.
Si no usa comillas dobles,
basenameno 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