Я создал этот маленький скрипт Bash, который имеет один аргумент (имя файла), и скрипт должен отвечать в соответствии с расширением файла:
#!/bin/bash
fileFormat=${1}
if [[ ${fileFormat} =~ [Ff][Aa]?[Ss]?[Tt]?[Qq]\.?[[:alnum:]]+$ ]]; then
echo "its a FASTQ file";
elif [[ ${fileFormat} =~ [Ss][Aa][Mm] ]]; then
echo "its a SAM file";
else
echo "its not fasta nor sam";
fi
Это работает так:
sh script.sh filename.sam
Если это fastq (или FASTQ, или fq, или FQ, или fastq.gz (сжатый)), я хочу, чтобы скрипт сказал мне «это fastq». Если это Сэм, я хочу, чтобы он сказал мне, что это Сэм, а если нет, я хочу сказать мне, что это ни Сэм, ни fastq.
ПРОБЛЕМА: когда я не рассматривал сценарий .gz (сжатый), сценарий работал хорошо и дал ожидаемый результат, но что-то происходит, когда я пытаюсь добавить эту последнюю часть к объяснить эту ситуацию (см. третью строку, часть, где говорится.? [[: alnum:]] +). Эта часть предназначена для того, чтобы сказать «в имени файла после расширения (в данном случае fastq) может быть точка плюс некоторое слово после нее».
Мой вклад такой:
sh script.sh filename.fastq.gz
И это работает. Но если я поставлю:
sh script.sh filename.fastq
Там написано, что это не fastq. Я хотел поставить эту последнюю часть как дополнительную, но если я добавлю "?" в конце это не работает. Какие-нибудь мысли? Спасибо! Мой вопрос - исправить эту часть, чтобы работать в обоих случаях.