2013-08-16 2 views
0

는 I는 복수의 파일을 통과하여 하나 개의 파일로 결과를 출력하는 루프 만들어 그것은 x *를 입력으로합니다. 스크립트 파일에 그 입력 파일의 $ x와 출력의 각 소요/홈/스크립트/배시 병렬 처리 한 출력 파일

000 지금은 질문이 :이은 몇 천 파일에서 수행되는 경우

, 그것을 넣을 수있는 좋은 방법입니다 이거? 나는 여러 입력 파일을 사용하지만, 하나 개의 출력 파일을 지정하는 경우

또한,이 평균 내 출력은 추가되지 않습니다 것? 그것을 수행하는 방법

감사는 Irek

답변

1

예, 출력 파일은 각각의 프로세스에 의해 덮어 도착하지 않을 경우. 자체 파일에 각 스크립트 출력을 확인하고 모든 스크립트가 완료되면, 출력 연결할 : 당신은 대신 파일의 표준 출력으로 출력 스크립트를 변경하거나 이름을 받아 들일 수 있도록해야

i=0 
for x in /home/moleculo/x* ; do 
    ExtractOutCalls2.sh /home/Scripts/000 $x > OUT.$i & 
    ((i++)) 
done 
wait 
cat OUT.* > OUT 
rm OUT.* 

을 생성 될 출력 파일의 이름.

+0

를 [1] 그래서 이것은하고있다 속임수. 이것은 파일의 천의 부부 병렬로 수행되는 경우에, 어떻게 내 코어의 관점에서 보는가? 윌 크래쉬? – Irek

+0

@Irek : 당신은 수천 개의 코어를 가지고 있습니까? 디스크 I/O는 아마하지만, 병목이 될 것입니다. 수천 개의 프로세스를 실행하지 마십시오. – choroba

+0

글쎄, 사실, 나는 단지 그것을 영리하게하고 싶다. 하지만 내가 1 파일 입력 만해도 xargs -P 4 -n 1 script.sh처럼 속도가 빨라질까요? 아니면 단지 1 개의 파일 – Irek

1

종종 당신은 파일을 사용할 수 있습니다 - 지정하는 표준 출력 :

for x in /home/moleculo/x*; do ExtractOutCalls2.sh - $x & done 

출력은 GNU 병렬 사용 혼합 방지하려면 : 나는 $ ARGV로 outptu이

parallel ExtractOutCalls2.sh - {} ::: /home/moleculo/x* > output 
+0

두 번째는 더 청소기로 가고 있기 때문에, 여전히 좋은 그것을하지 않습니다. –