5개의 입력 변수가 있는 루프를 어떻게 생성합니까?

5개의 입력 변수가 있는 루프를 어떻게 생성합니까?

올바르게 실행하려면 5개의 입력이 필요한 독점 명령이 있습니다.

command -cval <value> -tval <value> -dval <value> -kval <value>

구성 파일의 항목을 한 줄씩 읽어서 이 명령을 실행할 수 있어야 합니다. 그러면 이 5개 값에 대한 새로운 요청이 있을 때 구성 파일 맨 아래에 새 데이터 줄을 간단히 추가할 수 있습니다. 스크립트를 다시 실행하세요. 간단하죠? ? ?

내 구성 파일은 "GROUP" 접두어로 설정되어 있으므로 이 방법을 사용하면 파일에서 "GROUP"이 포함된 행만 grep할 수 있으므로 처리하려는 동일한 형식으로 구성 파일에 새 항목을 쉽게 추가할 수 있습니다( 이것이 좋은 생각인지 확실하지 않습니다):

## ORIG CONFIG FILE ##
cval, tval, dval, mval, kval    
cval, tval, dval, mval, kval
cval, tval, dval, mval, kval
...

## GROUP APPENDED CONFIG FILE ##
GROUP, cval, tval, dval, mval, kval     
GROUP, cval, tval, dval, mval, kval
GROUP, cval, tval, dval, mval, kval
...

참고: 구성 파일의 이러한 값은 중복될 수 있으므로 한 줄씩 처리하고 싶습니다. 또한 구성 파일을 원하는 대로 설정할 수 있으므로 이 방법이 최적이거나 최적이 아닌 이유를 자유롭게 알려주세요.

내 질문: 다음과 같이 데이터를 처리하기 위해 루프에서 명령을 실행하려면 어떻게 해야 합니까?

LOOP1(첫 번째 줄) 명령 cval, tval, dval, mval, kval

LOOP2(두 번째 줄) 명령 cval, tval, dval, mval, kval

LOOP3(세 번째 줄)은 cval, tval, dval, mval, kval 명령을 수행합니다.

...등등이 구성 파일의 각 줄을 반복합니다.

답변1

이 파일이 주어지면:

$ cat input
GROUP, cval1, tval1, dval1, mval1, kval1
DISREGARD, you, should, not, parse, this, line
GROUP, cval2, tval2, dval2, mval2, kval2
GROUP, cval3, tval3, dval3, mval3, kval3

다음 스크립트가 주어졌습니다.

#!/bin/bash
awk -F, '/^GROUP/ {print $2,$3,$4,$5,$6}' input | while read c t d m k; do
  echo -cval $c -tval $t -dval $d -mval $m -kval $k
done

우리는 다음과 같은 결과를 얻습니다.

$ ./go.sh
-cval cval1 -tval tval1 -dval dval1 -mval mval1 -kval kval1
-cval cval2 -tval tval2 -dval dval2 -mval mval2 -kval kval2
-cval cval3 -tval tval3 -dval dval3 -mval mval3 -kval kval3

echo독점 명령으로 바꾸면 준비가 완료됩니다.

답변2

그리고GNU 병렬(그리고 제공된 입력을 뻔뻔하게 빌립니다.돕고티의 답변

grep '^GROUP' input | parallel --col-sep ', *' -- \
  /bin/echo -cval {2} -tval {3} -dval {4} -mval {5} -kval {6}

산출:

-cval cval1 -tval tval1 -dval dval1 -mval mval1 -kval kval1
-cval cval2 -tval tval2 -dval dval2 -mval mval2 -kval kval2
-cval cval3 -tval tval3 -dval dval3 -mval mval3 -kval kval3

/bin/echo실제 명령으로 바꾸십시오 .

답변3

sed방법:

sed -n '/^GR/{s/^GROUP/command/
              s/,/-c/
              s/,/-t/
              s/,/-d/
              s/,/-m/
              s/,/-k/
              s/-./ &val /gp}' input

출력 (주어진 내용OP):

command -cval cval -tval tval -dval dval -mval mval -kval kval
command -cval cval -tval tval -dval dval -mval mval -kval kval
command -cval cval -tval tval -dval dval -mval mval -kval kval

실제로 출력을 실행하려면(오류 코드가 있는지 다시 확인한 후) 다음을 변경합니다 gp(gp로바르린트) 로 끝나다 ge(g현지 e평가).

관련 정보