2012-04-22 22 views
0

我在PBS系統上運行了一些陣列作業(儘管希望不需要關於PBS系統的知識來回答我的問題!)。我有24次運行,但是我想將它們分成5個子作業,所以我需要運行我的腳本120次。計算模型運行的ID

在給出-t 1-120的PBS選項後,我可以使用$PBS_ARRAYID得到當前的作業數組ID。不過,我想創建一些輸出文件。如果這些輸出文件使用了只有24次運行的ID,那麼最好使用它的子運行標識符(例如output-1a.txt,output-1b.txt ... output-1e)。 txt,output-2a.txt)。

因此,我需要的是一種計算方式來獲得ID(在1-24範圍內)連同子運行標識符(大概是在一組if語句中),它可以用於一個shell腳本。不幸的是,我的數學和我的Unix知識都不足以證明這一點。我認爲我需要與目前$PBS_ARRAYID相對於120或24的商數/餘數有關,但這就像我已經得到的那樣...

回答

2

你只需要一個模塊化部門。這在Ruby中快速模擬將是:

p = Array.new; (1..120).each {|i| p[i] = "Run #{1+(i/5)}-#{((i%5)+96).chr}" }

它說的很簡單,就是運行應該從1開始和五個每個新節之後增量,使得後端子運行應該是ascii字符表示96加上子運行的位置(例如97 =='a')。

這是擊:

#!/bin/bash 

chr() { 
    local tmp 
    [ ${1} -lt 256 ] || return 1 
    printf -v tmp '%03o' "$1" 
    printf \\"$tmp" 

}

for ((i = 0; i < ${#ARP[*]}; i++)) 
do 
    charcode=$((($i % 5)+97)) 
    charachter=$(chr "$charcode") 
    echo "Filename: output-$((($i/5)+1))$charachter" 
done 

我只是用ARP作爲數組的名字,但可以很明顯的替代品。祝你好運!

+0

非常感謝!這只是一個標準的bash外殼:) – ChrisW 2012-04-22 18:58:38

+1

請注意,我在這裏得到了ascii轉換函數的小數點:http://mywiki.wooledge.org/BashFAQ/071 – 2012-04-22 19:35:29