Назад | Перейти на главную страницу

Bash для перенаправления вывода цикла на имя файла переменной

В следующем цикле 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