如何将一个文件的行写入各自目录中的单个文件?

时间:2019-05-21 16:02:32

标签: bash for-loop awk grep printf

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

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

input.data:

60 13 44.375 3 500 1.8

sizes.txt:

44.732
44.733
44.823
44.532

我需要输入input.data的第三个数字,将其替换为size.txt的第1行,并将其放入名为frame0001的目录中,然后对size.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文件,然后将其放置在每个目录中。

1 个答案:

答案 0 :(得分:1)

#!/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