Простой скрипт, который заменяет переменную путем с помощью awk - PullRequest
0 голосов
/ 07 июня 2011

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

Мне нужно:

#! /bin/sh
#PBS -N runme_$file
#PBS -o $file.out
#PBS -e $file..err
#PBS -q batch
#PBS -j oe
#PBS -m abe
#PBS -r n
#PBS -l nodes=1:ppn=1
#PBS -l walltime=24:00:00

/home/example/proggie script $file $parameter2
echo "DONE"

замена $ file на '/ tmp / output', поэтому его следует преобразовать в:

#! /bin/sh
#PBS -N runme_/tmp/output
#PBS -o /tmp/output.out
#PBS -e /tmp/output.err
#PBS -q batch
#PBS -j oe
#PBS -m abe
#PBS -r n
#PBS -l nodes=1:ppn=1
#PBS -l walltime=24:00:00

/home/example/proggie script /tmp/output $parameter2
/home/example2/proggie2 /tmp/output
echo "DONE"

PBS-часть важна, поскольку она препятствует использованию параметров.Поэтому я не могу просто использовать $ 1 и $ 2 и дать сценарию необходимые параметры с помощью аргументов.Вместо этого мне нужно изменить файл с помощью команды замещения, затем я могу отправить его в систему очередей.Я все еще хочу иметь возможность использовать скрипт из командной строки для быстрого тестирования.

Я уже пытался использовать sed, но возможность появления специальных символов в файле все испортило.Должен быть лучший способ.

Ответы [ 2 ]

0 голосов
/ 07 июня 2011

Использование sed:

sed "s%\$file%$file%" script.in > script.out

Использование awk (gawk или GNU Awk):

awk '{ gsub(/\$file/, file); print }' file="$file" script.in > script.out

В обоих примерах я предполагаю, что этот контекст редактирования имеет правильное значение для имени файла в $file. Я также предполагаю, что у вас нет других переменных, таких как $file1 или $filename в скрипте; если у вас есть такие переменные, регулярные выражения должны быть более сложными. Я также предполагаю, что в примере sed вы не встраиваете символы процента в имена файлов.

0 голосов
/ 07 июня 2011

Что делать, если вы указали $ file как $ {file}. Тогда вы сможете использовать sed. Когда вы говорите «специальные символы», я предполагаю, что вы имеете в виду другие знаки $. По крайней мере, это единственное, что я вижу в твоих сообщениях.

...