이 while 루프에 GNU Parallel을 어떻게 사용합니까?


12

그래서 나는 while 루프를 가지고 있습니다 :

cat live_hosts | while read host; do \
    sortstuff.sh -a "$host" > sortedstuff-"$host"; done

그러나 시간이 오래 걸릴 수 있습니다. 이 while 루프에 GNU Parallel을 어떻게 사용합니까?

답변:


13

while 루프를 사용하지 않습니다.

parallel "sortstuff.sh -a {} > sortedstuff-{}" <live_hosts

경로 가 확장되어 ( live_hosts예 :) 경로가 있으면 작동하지 않습니다 . 이러한 경우 사용 및 세부 사항 은 매뉴얼 을 참조하십시오 ./some/dir/filesortstuff.sh -a /some/dir/file > sortedstuff-/some/dir/fileno such file or directory{//}{/}gnu-parallel

parallel "sortstuff.sh -a {} > {//}/sortedstuff-{/}" <live_hosts

출력을 넣을 때 tee함께 사용할 수 있습니까? 그래서 출력이 진행되는 것을 볼 수 있습니다. parallelsortedstuff
프롤레타리아

1
@ Proletariat-당신도 터미널에 출력하고 싶습니까? 예 >| tee들어 첫 번째 명령은 다음 과 같이 바꾸십시오parallel "sortstuff.sh -a {} | tee sortedstuff-{}" <live_hosts
don_crissti

3

옛날 학교 인 "한 가지 일을 잘해라"Unix 녀석으로서, 나는 줄 바꿈 스크립트에 문자열 대체물을 넣었습니다.

#!/bin/sh
sortstuff.sh -a "$1" > sortedstuff-"$1"

당신이 그것을 호출하는 경우 wrapper.shparallel명령은 될 호출 :

parallel wrapper.sh < live_hosts

cat이런 종류의 것은 필요하지 않으므로 외부 프로그램 호출을 저장하십시오.


2

당신은하지 않습니다 필요 parallel 루프의 몸이 이전의 반복에 의존하지 않기 때문에. 각 호스트에 대해 새로운 백그라운드 프로세스를 시작하십시오.

while read host; do
    sortstuff.sh -a "$host" > sortedstuff-"$host" &
done < live_hosts
wait    # Optional, to block until the background tasks are done

parallel하지만 특정 측면을보다 쉽게 ​​관리 할 수 ​​있습니다. 병렬로 실행중인 작업 수를보다 쉽게 ​​제한 할 수 있습니다.


3
경우 wc -l live_hosts더 많은 디스크 스핀들 또는 CPU 코어의 수보다 - 당신은 당신이 그와 같은 솔루션을 병렬에서 얻을 수있는 장점을 많이 먹을거야 - 작업이 내가 / O 나 CPU가 결합 된인지에 따라 달라집니다. parallel작업 수를 제한하는 기능은 단지 좋은 것이 아니라 처리 속도가 목표 인 경우 거의 필수적입니다.
워렌 영
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.