Realización de operaciones de cadenas de varias líneas con awk en lugar de bucle for

Realización de operaciones de cadenas de varias líneas con awk en lugar de bucle for

Supongamos un archivo de texto de varias líneas ( file1) que contiene rutas de archivo.

$ cat file1
./foo/foo
./foo/bar
./foo/baz

Me gustaría guardar solo los nombres de los archivos file2y anteponer cada nombre de archivo con algunos caracteres especiales (por ejemplo, [#).

Sé que puedo hacer esto mediante un bucle for simple, pero entiendo que esto se considera una práctica desfavorable.

for line in $(cat file1); do
echo "[#" $(basename "$line") >> file2;
done

Creo que esta tarea se puede realizar de forma más limpia a través de awk, pero el siguiente código es solo un fragmento. ¿Cómo realizo la tarea anterior con awk?

awk '{print "[#",$0=$(basename $0)}' $file1 > $file2

Respuesta1

Utilícelo /como separador de campos e imprima el último campo:

$ awk -F/ '{print "[#"$NF}' file1
[#foo
[#bar
[#baz

Respuesta2

sed -e 's|.*/|[#|' file1

Resultado

[#foo
[#bar
[#baz

información relacionada