Preciso criar 1000 arquivos de entrada contendo:
x = i, i varia de 1 a 1000
y=5
Cada arquivo deve ser colocado em um diretório separado. Tentei:
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
O que falha
Responder1
Se bem entendi, você quer algo assim:
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
Responder2
Seu código está errado, seria melhor em cd ..
vez de cd inp
e touch
em vez de cat
( cat
o comando retornaria um erro para um arquivo inexistente, touch
crie-o). Além disso, use echo
o comando (ou printf
conforme mencionado em@terdon resposta) para gravar em um arquivo.
Então, se você quiser apenas usar seu código sem erros, você pode fazer isso conforme abaixo:
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
NB: se você quiser que seu arquivo seja nomeado como dir1
, dir2
, ... em vez de dir{1}
, dir{2}
, ..., basta remover {}
e mkdir
comandar cd
dentro do seu loop:
mkdir -p dir$i
cd dir$i
NB2: Você pode simplificar seu código removendo max
valor ou obtendo max
valor como parâmetro; com um script chamado script.sh
, seria assim ao executá-lo:
script.sh 100
e o código:
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