2011-06-07 58 views
0

我有一個服務器上的PBS隊列工作的路徑來代替一個變量。 我想自動提交多個作業,因此需要用路徑替換一個變量。 因爲它是不可能得到的參數與隊列運行 行書,我想 取代通常使用 用硬編碼參數的shell變量。簡單的腳本,通過使用awk

我需要的是:

#! /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" 

與 '/ tmp目錄/輸出' 替換$文件,因此它應該被轉換成:

#! /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,而是出現在文件搞砸了一切的特殊字符 的可能性。一定有更好的方法。

+0

您的問題尚不清楚。你爲什麼迴應,但忽略'$ 1'?替換'$ file'的值從哪裏來? '$ parameter2'的值來自哪裏? PBS運行在哪裏;這個問題似乎完全切題? – 2011-06-07 14:34:26

+0

我編輯的問題更清楚。 – tarrasch 2011-06-07 14:47:08

回答

0

使用sed

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

使用awkgawk或GNU awk中):

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

在這兩個例子,我認爲這個編輯上下文具有用於$file文件名正確的值。我還假設腳本中沒有其他變量,例如$file1$filename;如果你有這樣的變量,正則表達式必須更復雜。我還假設在sed示例中沒有在文件名中嵌入百分比符號。

+0

awk線做了伎倆。然而sed部分破裂。無論如何謝謝你。 – tarrasch 2011-06-07 14:58:46

0

如果指定$文件爲$ {}文件什麼。那麼你應該可以使用sed。當你說「特殊字符」時,我假設你指的是其他$符號。至少這是我在你發佈的內容中唯一可以看到的東西。