В GNU Makefile (в системе Ubuntu Linux), как я могу удалить суффикс имени каждого файла в списке таким образом, чтобы имена файлов усекались в первой точке?
Предположим, у меня есть
NAMES = file1.a.b.c file2.x.y.z file3.b file4.foo
где имена могут происходить из расширения имени файла, используя $(wildcard file*)
.
Я бы хотел закончить с
NEWNAMES = file1 file2 file3 file4
или, возможно, даже
NEWNAMES = file1.quux file2.quux file3.quux file4.quux
(не обязательно в этом порядке)
Функция $(basename ...)
удаляет из имен только суффикс last .
В массивах, поддерживающих оболочку, я бы использовал что-то вроде "${names[@]%%.*}"
или "${names[@]/%.*/.quux}"
.
Причина, по которой вы хотите это сделать, заключается в том, что мы работаем в среде биоинформатики, где файлы имеют известный префикс имени файла, но их суффикс может быть любой комбинацией .fa
, .fas
, .fasta
(и т. Д.). ), с возможностью удвоения этих суффиксов (как в .fa.fa
), а также с суффиксом компрессора файлов, такого как .gz
, в конце.
Мы хотели бы преобразовать имена файлов в нормализованные prefix.suffix
имена файлов в Makefile, независимо от того, насколько сложным был исходный суффикс имени файла.