Bashスクリプトのループ

Bashスクリプトのループ

やるべきことがありますが、実際にはこのループアルゴリズムが詰まっています。詳細は次のとおりです。入力ファイルには3つのプロセスA、B、Cがあります。 2番目の列は到着時間で、3番目の列はナット値です。

A 1 2
B 2 3
C 0 4

AT = 0状態のプロセスはR =実行中でなければならず、AT状態の次のプロセスはプロセスがナット値に達した後にW =スタンバイとしてレンダリングする必要があるというアイデアを理解します。たとえば、4 R状態の場合、次のシーケンスはYESでなければなりません。 F = 次のような完全な出力

  A B C
0 - - R
1 W - R
2 R W W
3 W W R
4 W R W
5 R W W
6 F W R
7 F R F
8 F R F
9 F F F

先着順を使用するのと同じアイデアに疲れましたが、ここではラウンドロビンアルゴリズムを使用する必要があり、以前はbashで見たことがないので異なります。誰かが私にこのアイデアを与えれば、続けようとします。最後まで

nut value in the third column mean for ex first process A =2
so it must have two running status then it be finished
process C=4, must have 4 running status then finished and so on
the algorithm is round-robin i found this is the suitable one as the running status changes each line between the processes

はい、一度に1つの実行状態しかありません。もう一方はまだ到着していないか、待機中です。

答え1

これは大学/募集課題のように感じるので、台本ではなく洞察力とスクラップを提供することを選択しました。

例の例を見るとid_nut(3列目)AFAICTです。ラウンドロビン方式は、特にこの場合、降順で繰り返しを記述します。ただし、効率のために存在しないか到着していないナットインスタンス(A、B、Cなど)に時間を割り当ててはいけません。したがって、ナットはパーティーに到着した後にのみ追加されます。私は特にid_nut到着時間に基づいてソートされる単語キューを使用しません。

したがって、このシナリオをシミュレートしてロジックをテストするために到着ログ(最初のテーブル)を使用できます。あなたが知らない他のテストがある可能性が高いです。

  1. これらの特定の時点に到着する方法を見つけてください。まず、awk時間列に基づいて並べ替えてみてください。たぶんキューを使うこともできます。

  2. sortナッツを得るための優先順位のリストを維持してください。複数行の文字列または配列にすることができます。

  3. 希望の期間繰り返してseq範囲を作成します。

  4. もちろん、次の繰り返しの前に、現在の状態に基づいて次にトリガーするナットを決定する必要があります。しかし、いくつかのナッツが最後の反復ではリストにありませんでしたが、現在の反復にはあることをどうやって知ることができますか?

このヒントで十分です。

編集する:実行順序が(3番目の列)と誤って言われたのは、その列が(プロセスを実行するための残りのステップ数/割り当て数)であることが知られているためid_nutです。num_run_leftまあ、これは実際にアルファベットの降順のラウンドロビンです。上記のチップを適切に調整し、繰り返しながらnum_run_left各ナットを保管してください。

また、ここにいない場合は、一部のプラットフォームでソリューションを共有することもできます。 Turnitinなどのツールは盗作を主張する可能性があるため、送信後に共有するのが最善です。

関連情報