Как записать строки одного файла в отдельные файлы в собственных каталогах? - PullRequest
1 голос
/ 21 мая 2019

У меня есть сценарий, который мне нужен, чтобы прочитать каждую строку файла и распечатать эти строки по отдельности в свой собственный подкаталог, основанный на номере белья.

У меня есть файл с именем input.data, в котором есть один номер, который мне нужно изменить и поместить копию этого файла в каталоги, например:

input.data:

60 13 44.375 3 500 1.8

sizes.txt:

44.732
44.733
44.823
44.532

Мне нужно взять третье число input.data, заменить его строкой 1 of sizes.txt и поместить в каталог с именем frame0001, затем сделать то же самое с остальными строками файла sizes.txt, чтобы оно заканчивается в формате

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

...

Я пытался использовать комбинации awk, grep и echo внутри цикла for, но я не знаю, как заставить 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 Ответ

1 голос
/ 21 мая 2019
#!/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
...