Bash скрипт для нескольких выходных файлов - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь использовать скрипт bash для создания нескольких выходных файлов из файла, который я уже создал.Помимо создания 10 выходных файлов, я хочу изменить один фрагмент текста в каждом из файлов, которые я создаю из оригинала.

В исходном документе начальные строки гласят:

# For a single processor calculation
variable T equal 300 # Simulation temperature
variable salt equal 100.0 # Salt concentration [mM]

# Random number seed for Langevin integrator
variable random equal CPRAND 

Я хочу изменить текст, который читает CPRAND, на случайное число в каждом файле, который я создаю.

Текущий скрипт bash, который я сейчас использую, чтобы попробовать и сделать это, приведен ниже:

for i in {0..10}
do
   cat me.sh | sed ’s/CPRAND/$((1 + RANDOM % 1000))/g‘ > “RunFile$(printf “%03d” “$i”).in”
done

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

Спасибо!

Ответы [ 3 ]

0 голосов
/ 23 октября 2018

Поскольку вы используете инструкции, которые GNU / Bash должен интерпретировать, вы должны использовать двойные кавычки, а не одинарные, в конце рабочая инструкция может быть:

for i in {0..10}
do
   cat me.sh | sed "s/CPRAND/$((1 + RANDOM % 1000))/g" > "RunFile$(printf "%03d" "$i").in"
done
0 голосов
/ 23 октября 2018

Это может сработать для вас (GNU sed & parallel):

parallel 'sed 's/CPRAND/'$((1+RANDOM%1000))'/g' >RunFile{}.in' me.sh ::: {000..010}
0 голосов
/ 23 октября 2018

Вам нужно интерпретировать содержание программы sed, чтобы вычисление, которое вы делаете, обрабатывалось bash.Кроме того, вы можете избежать дополнительных cat и printf:

for i in {001..010}; do sed "s/CPRAND/$((1 + RANDOM % 1000))/" me.sh > RunFile${i}.in; done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...