Bash 스크립트의 루프

Bash 스크립트의 루프

해야 할 작업이 있지만 실제로 이 루프 알고리즘이 막혔습니다. 자세한 내용은 다음과 같습니다. 입력 파일에는 3개의 프로세스 A, B, C가 있습니다. 두 번째 열은 도착 시간이고 세 번째 열은 너트 값입니다.

A 1 2
B 2 3
C 0 4

AT=0 상태의 프로세스는 R=실행 중이어야 하고 AT 상태의 다음 프로세스는 프로세스가 너트 값에 도달한 후 W=대기로 렌더링되어야 한다는 아이디어를 이해합니다. 예를 들어 4 R 상태의 경우 다음 시퀀스는 예여야 합니다. 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

이것은 대학/모집 과제처럼 느껴지므로 대본보다는 통찰력과 스크랩을 제공하기로 선택했습니다.

예제 사례를 보면 id_nut(세 번째 열) AFAICT입니다. 라운드 로빈 방법은 특히 이 경우 내림차순으로 반복을 설명합니다. 그러나 효율성을 위해 존재하지 않거나 도착하지 않은 너트 인스턴스(예: A, B, C)에 시간을 할당해서는 안 됩니다. 따라서 너트는 파티에 도착한 후에만 추가됩니다. 나는 특히 id_nut도착 시간에 따라 정렬되는 단어 대기열을 사용하지 않습니다.

따라서 이 시나리오를 시뮬레이션하여 논리를 테스트하는 데 도착 로그(첫 번째 테이블)를 사용할 수 있습니다. 당신이 모르는 다른 테스트가 있을 가능성이 높습니다.

  1. 이러한 특정 시점에 도착하도록 하는 방법을 찾으십시오. 먼저 awk시간 열을 기준으로 정렬해 보세요. 어쩌면 대기열을 사용할 수도 있습니다.

  2. sort견과류를 얻을 수 있는 우선 순위 목록을 유지하십시오 . 여러 줄 문자열 또는 배열일 수 있습니다.

  3. 원하는 기간 동안 반복하여 seq범위를 만듭니다.

  4. 물론 다음 반복 전에 현재 상태를 기반으로 다음에 트리거할 너트를 결정해야 합니다. 하지만 일부 견과류가 마지막 반복에서는 목록에 없었지만 현재 반복에는 있다는 것을 어떻게 알 수 있습니까?

이 팁으로 충분하길 바랍니다.

편집하다:실행 순서가 (세 번째 열)이라고 잘못 말한 이유는 해당 열이 (프로세스를 실행하기 위해 남은 단계 수/할당 수) id_nut라고 알려졌기 때문입니다 . num_run_left글쎄, 이것은 실제로 알파벳 내림차순의 라운드 로빈입니다. 위의 팁을 적절히 조정하고 num_run_left반복하면서 각 너트를 보관하십시오.

또한 여기에 있지 않다면 일부 플랫폼에서 솔루션을 공유할 수도 있습니다. Turnitin과 같은 도구는 표절을 주장할 수 있으므로 제출 후 공유하는 것이 가장 좋습니다.

관련 정보