파일 내용을 한 줄씩 사용하고 실행합니다.

파일 내용을 한 줄씩 사용하고 실행합니다.

파일.txt

servername1:DBNAME1:/u01/app
servername2:DBNAME2:/u01/dbs
servername3:DBNAME3:/u01/app1

위의 파일 내용을 한 줄씩 사용하여 쉘 스크립트에서 실행하고 싶습니다

command1 hostname=servername1 db=dbanme1 location=/u01/app 
command2 hostname=servername1 db=dbanme1 location=/u01/app

위 명령 후에는 두 번째 행 값을 가져와서 실행해야 합니다.

답변1

while IFS=':' read -r hostname db location
do
    set -- hostname="$hostname" db="$db" location="$location"
    command1 "$@"
    command2 "$@"
done <file.txt

또는 위치 매개변수를 보존해야 하는 경우

while IFS=':' read -r hostname db location
do
    command1 hostname="$hostname" db="$db" location="$location"
    command2 hostname="$hostname" db="$db" location="$location"
done <file.txt

이 두 가지 모두 file.txt한 줄씩 읽혀지며 각 줄마다 구분된 세 개의 필드가 세 개의 변수 및 로 :읽혀집니다 . 행에 더 많은 -로 구분된 필드가 있는 경우 해당 필드는 값에 추가됩니다 .hostnamedblocation:location

그런 다음 명령을 실행하십시오.

답변2

사용GNU 병렬:

$ parallel --colsep ":" 'command1 hostname={1} db={2} location={3}; command2 hostname={1} db={2} location={3}' :::: file.txt 

file.txt명령의 모든 행에 대해 실행됩니다. , , 가 열의 값으로 대체되도록 :행 이 분할됩니다 .{1}{2}{3}

프로세스 는 parallel병렬로 시작됩니다. 기본적으로 병렬로 실행되는 작업 수는 코어 수입니다. 병렬로 실행할 수 있는 작업 수를 지정할 수 있습니다 -j. -k행이 실행된 순서대로 출력을 유지해야 하는 경우 이 매개변수를 사용하십시오 .

관련 정보