В следующем цикле bash я хочу перенаправить содержимое в имя файла переменной.
for i in {1..22};do echo $i > $i_output.txt; done
К сожалению файлы не создаются. Первоначально я хотел найти хромосомы в файле и создать файл для каждой хромосомы. Но это менее проверено:
for i in {1..22}; grep -E "[a-z]+[0-9]+\t$i\t" rawdata.txt > $i_chr.txt;done
Как мы можем перенаправить вывод в цикле for на имя файла переменной?
Имя переменной следует заключать в фигурные скобки или двойные кавычки. Следующий цикл работает.
В противном случае оболочка попытается расширить переменную $i_output
.
for i in {1..22};do echo ${i} > ${i}_output.txt; done
for i in {1..22};do echo "$i" > "$i"_output.txt; done
В вашем случае фигурные скобки могут быть лучшим выбором, поскольку вы уже используете двойные кавычки, и у вашей оболочки возникнут проблемы с сортировкой внутренних и внешних двойных кавычек.
for i in {1..22}; grep -E "[a-z]+[0-9]+\t${i}\t" rawdata.txt > ${i}_chr.txt;done