Выполнение многострочной строковой операции с помощью awk вместо цикла for

Выполнение многострочной строковой операции с помощью awk вместо цикла for

Предположим, что имеется многострочный текстовый файл ( file1), содержащий пути к файлам.

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

Я хотел бы сохранить только имена файлов file2и добавить к каждому имени файла некоторые специальные символы (например, [#).

Я знаю, что это можно сделать с помощью простого цикла for, но я понимаю, что это считается нежелательной практикой.

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

Я считаю, что эту задачу можно выполнить чище с помощью awk, но приведенный ниже код — это только фрагмент. Как мне выполнить указанную выше задачу с помощью awk?

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

решение1

Использовать /в качестве разделителя полей и вывести последнее поле:

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

решение2

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

Результат

[#foo
[#bar
[#baz

Связанный контент