Bash - изменить имя файла, изменив переменную имени файла

Я хочу сохранить результаты нескольких grep в формате.txt. я делаю

for i in GO_*.txt; do
    grep -o "GO:\w*" ${i} | grep -f - ../PFAM2GO.txt > ${i}_PFAM+GO.txt
done

Дело в том, что, очевидно, конечное имя файла охватывает и оригинальное расширение файла, будучи GO_*.txt_PFAM+GO.txt, Теперь я хотел бы только иметь GO_*_PFAM+GO.txt, Есть ли способ изменить ${i} как отменить .txt без необходимости выполнять rename или mv после этого?

Примечание: * часть имеет переменную длину.

1 ответ

Решение

Вы можете использовать расширение параметра, чтобы удалить расширение из имени файла:

for i in GO_*.txt; do
    name="${i%.txt}"
    grep -o "GO:\w*" "${i}" | grep -f - ../PFAM2GO.txt > "${name}_PFAM+GO.txt"
done
Другие вопросы по тегам