파일.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
한 줄씩 읽혀지며 각 줄마다 구분된 세 개의 필드가 세 개의 변수 및 로 :
읽혀집니다 . 행에 더 많은 -로 구분된 필드가 있는 경우 해당 필드는 값에 추가됩니다 .hostname
db
location
:
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
행이 실행된 순서대로 출력을 유지해야 하는 경우 이 매개변수를 사용하십시오 .