Necesito crear 1000 archivos de entrada que contengan:
x=i, i varía de 1 a 1000
y=5
Cada archivo debe colocarse en un directorio separado. Lo intenté:
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
que falla
Respuesta1
Si te entendí correctamente, quieres algo como esto:
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
Respuesta2
Su código es incorrecto, sería mejor con cd ..
en lugar de cd inp
y touch
en lugar de cat
( cat
el comando devolvería un error para un archivo inexistente, touch
créelo). Además, use echo
el comando (o printf
como se menciona en@terdon respuesta) para escribir en un archivo.
Entonces, si solo desea utilizar su código sin errores, puede hacerlo de la siguiente manera:
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: si desea que su archivo se llame como dir1
, dir2
, ... en lugar de dir{1}
, dir{2}
, ..., simplemente elimínelo {}
y mkdir
ordene cd
dentro de su bucle:
mkdir -p dir$i
cd dir$i
NB2: Puede simplificar su código eliminando max
valor u obteniendo max
valor como parámetro; con un script llamado script.sh
, quedaría así al ejecutarlo:
script.sh 100
y el 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