我有一个脚本,需要读取文件的每一行,并将这些行分别打印到基于行号的自己的子目录中。

我有一个名为input.data的文件,其中有一个我需要更改的数字,并将该文件的副本放入目录中,如下所示:

输入数据:

60 13 44.375 3 500 1.8

Sizes.txt:

44.732
44.733
44.823
44.532

我需要输入input.data的第三个数字,用sizes.txt的第1行替换,并将其放入名为frame0001的目录中,然后对sizes.txt文件的其余行执行相同的操作,以便最终得到格式

frame0001/input.data
frame0002/input.data
frame0003/input.data

...

我已经尝试过在for循环中使用awk,grep和echo的组合,但是我不知道如何让awk将NR当作awk之外的变量的值。

我用过:

mkdir $(printf "frame%04i" $(seq 1 475))

制作目录frame0001-frame0475

然后我用:

i=1; for file in frame*; do cp "input.data" $(printf "frame%04i/a.out" "$i"); i=$((i+1)); done

可以将input.data文件原样复制到每个目录中,但是手动编辑每个文件将花费很长时间。我想使此过程自动化,以便能够读取Sizes.txt文件,并在每个目录中更改input.data文件,或者先编辑input.data文件,然后将其放置在每个目录中。

分析解答
#!/bin/env bash
cnt=0
while IFS= read -r size; do
    printf -v dir 'frame%04d' $(( ++cnt ))
    mkdir -p "$dir" &&
    awk -v size="$size" '{$3=size}1' input.data > "${dir}/input.data"
done < sizes.txt