2012-04-22 6 views
0

私はPBSシステム上でいくつかの配列ジョブを実行しています(私の質問に答えるにはPBSシステムについての知識は必要ないと思いますが)。私は24回実行しましたが、それぞれを5つのサブジョブに分割したいので、スクリプトを120回実行する必要があります。モデルランのIDを計算する

-t 1-120というPBSオプションを指定した後、$PBS_ARRAYIDを使用して現在のジョブ配列IDを取得できます。しかし、いくつかの出力ファイルを作成したい。これらの出力ファイルが、サブラン識別子(例えば、output-1a.txt、output-1b.txt ... output-1e)と一緒にわずか24回実行された場合のIDを使用するのが最もよいでしょう。 txt、output-2a.txt)。

私が必要とするのは、(おそらく一連のif文で)サブラン識別子とともにIDを(1-24の範囲で)取得する方法を計算する方法です。シェルスクリプト。残念ながら、私の数学も私のUnixの知識もこれを理解するのには十分に良いものではありません。私は120/24のどちらかを基準にして現在の$PBS_ARRAYIDに基づいて商/剰余と何かする必要があると仮定しますが、それは私が持っている限りです...

答えて

2

ほんの少しのモジュール分割。 Rubyでこれの迅速なシミュレーションは、次のようになります。

これが何を言うことは、実行が5のそれぞれの新しいセクションの後に1と増分で開始する必要があること、および末尾のサブランがなければならないことだけである

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

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

+1

私は10進数ascii変換関数をここで得たことに注意してください:http://mywiki.wooledge.org/BashFAQ/071 –

関連する問題