我有一个脚本,需要读取文件的每一行,并将这些行分别打印到基于行号的自己的子目录中。
我有一个名为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文件,然后将其放置在每个目录中。
答案 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