У меня есть сценарий, который мне нужен для чтения каждой строки файла и печати этих строк по отдельности в их собственный подкаталог, основанный на номере строки.
У меня есть файл с именем input.data, в котором есть один номер, который мне нужно изменить, и поместить копию этого файла в каталоги следующим образом:
входные данные:
60 13 44.375 3 500 1.8
размеры.txt:
44.732
44.733
44.823
44.532
Мне нужно взять третий номер input.data, заменить его строкой 1 файла size.txt и поместить в директорию с именем frame0001, затем сделать то же самое с оставшимися строками файла size.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 в каждый каталог как есть, но редактирование каждого файла вручную займет много времени. Я хотел бы автоматизировать этот процесс, чтобы иметь возможность читать файл size.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
Мне было интересно, собирались ли вы как-то вытащить кролика из своей шляпы и сделать все это в awk
. Но цикл чтения и замена awk
кажутся такими же логичными, как и все остальное.
@DavidC.Rankin mkdir
означает, что все это нельзя сделать в awk. Я имею в виду, что вы можете вызвать mkdir косвенно из awk, но тогда у вас будет дерево вызовов, подобное shell { awk { system { shell { mkdir }}}}
, а не просто shell { mkdir; awk }
, так что это явно будет неправильный подход. Однако я считаю это мощь, если бы для придумывания имени каталога требовалось гораздо больше текстовых манипуляций, но здесь это не так.
Хорошая точка зрения. Это «гайки и болты» мыслительного процесса, которые ускользнули от меня с первого взгляда.
Большое спасибо, это самый проницательный способ объединить все в один цикл. Я не знал, что вы можете использовать awk таким образом.