Как записать строки одного файла в отдельные файлы в своих каталогах?

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

У меня есть файл с именем 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, а затем помещать его в каждый каталог.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
31
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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

Большое спасибо, это самый проницательный способ объединить все в один цикл. Я не знал, что вы можете использовать awk таким образом.

Owluitar 21.05.2019 18:23

Мне было интересно, собирались ли вы как-то вытащить кролика из своей шляпы и сделать все это в awk. Но цикл чтения и замена awk кажутся такими же логичными, как и все остальное.

David C. Rankin 21.05.2019 20:44

@DavidC.Rankin mkdir означает, что все это нельзя сделать в awk. Я имею в виду, что вы можете вызвать mkdir косвенно из awk, но тогда у вас будет дерево вызовов, подобное shell { awk { system { shell { mkdir }}}}, а не просто shell { mkdir; awk }, так что это явно будет неправильный подход. Однако я считаю это мощь, если бы для придумывания имени каталога требовалось гораздо больше текстовых манипуляций, но здесь это не так.

Ed Morton 21.05.2019 20:46

Хорошая точка зрения. Это «гайки и болты» мыслительного процесса, которые ускользнули от меня с первого взгляда.

David C. Rankin 21.05.2019 20:48

Другие вопросы по теме