В оболочке bash у меня есть переменная, которая печатает набор имен. Теперь я хотел бы добавить расширение к нему. У меня есть файлы последовательности со следующими именами:Передача переменных в другие программы
Meoh_R1.fastq
Meoh_R2.fastq
R3G_R1.fastq
R3G_R2.fastq
У меня есть общие имена (Meoh и R3G в переменной). В Баш я запускаю следующий сценарий без каких-либо проблем:
# Stores common names in variable `i` (meoh and r3g)
for i in $(ls ./raw_reads | grep ^[^d]| rev | cut -c 10- | rev | uniq)
do
# Make direcotry for fastqc
mkdir -p ${i%}_fastqc
# Run fastqc
fastqc -o ./${i%}_fastqc -f fastq ./rnaseq/${i%}_R1.fastq ./rnaseq/${i%}_R2.fastq
done
Теперь я запускаю следующий код, который не работает:
filelist=$(ls ./raw_reads | grep ^[^d]| rev | cut -c 10- | rev | uniq)
mkdir -p ${i%}_fastqc
fastqc -o ./${filelist%}_fastqc -f fastq ./rnaseq/${filelist%}_R1.fastq ./rnaseq/${filelist%}_R2.fastq
Приведенный выше код не создает отдельные папки, как рабочий код, предоставленный выше.
Почему вы пишете '$ {i%}' вместо '$ {i}'? Модификатор '%' ничего не делает, если после него ничего не поместить. – Barmar
Вы не можете поместить всю переменную списка файлов в одну командную строку. Он не будет автоматически разделять его и повторять команду для каждого элемента. Вам нужно использовать петлю, как и вы. – Barmar