0

PBS システムでいくつかのアレイ ジョブを実行しています (私の質問に答えるのに PBS システムの知識は必要ありません!)。24 回実行しましたが、それぞれを 5 つのサブジョブに分割したいので、スクリプトを 120 回実行する必要があります。

の PBS オプションを指定した後-t 1-120、 を使用して現在のジョブ配列 ID を取得できます$PBS_ARRAYID。ただし、いくつかの出力ファイルを作成したいと考えています。これらの出力ファイルが、サブラン識別子 (例: output-1a.txt、output-1b.txt ... output-1e. txt、出力 2a.txt)。

したがって、シェルスクリプトで使用できるサブラン識別子 (おそらく一連の if ステートメント内) と共に ID (1 から 24 の範囲) を取得する方法を計算する方法が必要です。 . 残念ながら、私の数学も Unix の知識も、これを理解するのに十分ではありません。120または24に対する現在の相対値に基づいて、商/剰余を処理する必要があると思いますが、$PBS_ARRAYIDそれは私が持っている限りです...

4

1 に答える 1

2

少しモジュール式の除算が必要です。Rubyでのこれの簡単なシミュレーションは次のようになります。

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

これが言うことは、実行は1から始まり、5の新しいセクションごとに増分する必要があり、後続のサブ実行は96とサブ実行の位置で表されるASCII文字である必要があるということです(たとえば、97 == 'a')。

ここにBashがあります:

#!/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を使用しましたが、明らかにそれで置き換えることができます。幸運を!

于 2012-04-22T18:53:46.970 に答える