
Предположим, что имеется многострочный текстовый файл ( 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