com awk :
awk '{print $0 > "dir"NR"/textfile"}' datafile
-
NRse expande para o número do registro atual, portanto, cada linha será salva emdir<line_number>/textfile, por exemplo, a primeira linha seria salva emdir1/textfile, a segunda seria emdir2/textfilee assim por diante.
Não há necessidade do dispendioso while de loop pelas linhas do arquivo e da operação:
i=1; while IFS= read -r line; do echo "$line" >dir"$i"/textfile; ((i++)); done <datafile
A forma de shell acima é apenas para mostrar o método, você deve seguir a awk way.
Edite com base no comentário:
Para substituir todos os 400 s pelos números necessários de datafile :
i=1; while IFS= read -r line; do sed "s/400/$line/g" dir"$i"/textfile; ((i++)); done <datafile
Para editar os arquivos no local:
i=1; while IFS= read -r line; do sed -i "s/400/$line/g" dir"$i"/textfile; ((i++)); done <datafile
Arquivos originais cujo backup foi feito com .bak extension:
i=1; while IFS= read -r line; do sed -i.bak "s/400/$line/g" dir"$i"/textfile; ((i++)); done <datafile