Мне нужно создать 1000 входных файлов, содержащих:
x=i, i изменяется от 1 до 1000
у=5
Каждый файл должен быть помещен в отдельную директорию. Я пробовал:
mkdir inp
cd inp
max=1000
for ((i=1;i<=max;i++)); do
mkdir dir{$i}
cd dir{$i}
cat input_file.txt
x=i > input_file.txt
y=5 >> input_file.txt
cd inp
done
Который терпит неудачу
решение1
Если я правильно понял, вы хотите что-то вроде этого:
for ((i=1;i<=1000;i++)); do
mkdir -p inp/dir$i
printf 'x=%s\ny=5s\n' "$i" > inp/dir$i/input_file.txt
done
решение2
Ваш код неверен, лучше было бы cd ..
вместо cd inp
, и touch
вместо cat
( cat
команда вернет ошибку для несуществующего файла, touch
создайте его). Также используйте echo
команду (или printf
как указано в@terdon ответ) для записи в файл.
Так что если вы просто хотите использовать свой код без ошибок, вы можете сделать это следующим образом:
mkdir -p inp
cd inp
max=1000
for ((i=1;i<=max;i++)); do
mkdir -p dir{$i}
cd dir{$i}
touch input_file.txt
echo x=i >> input_file.txt
echo y=5 >> input_file.txt
cd ..
done
Примечание: если вы хотите, чтобы ваш файл назывался как dir1
, dir2
, ... вместо dir{1}
, dir{2}
, ..., просто удалите {}
команду mkdir
и cd
внутри вашего цикла:
mkdir -p dir$i
cd dir$i
Примечание 2: Вы можете упростить свой код, удалив max
значение или получив max
значение в качестве параметра; со скриптом с именем script.sh
это будет выглядеть примерно так при его выполнении:
script.sh 100
и код:
mkdir -p inp
cd inp
for ((i=1;i<=$1;i++)); do
mkdir -p dir$i
cd dir$i
touch input_file.txt
echo x=$i >> input_file.txt
echo y=5 >> input_file.txt
cd ..
done